1001 Average

忍不住又补了一题。

只要枚举1与2之间1给2,2给1,什么都不做三种状态。

后面的情况都已经决定了。

(估计只有我比赛的时候把a candy当成a个糖果了吧QAQ)

 # include <iostream>
# include <cstdio>
# include <cstring>
# include <vector>
using namespace std;
typedef pair<int,int> pii;
typedef long long LL;
# define maxn
LL a[maxn],b[maxn],aver;
vector <pii> ans;
int n; void ans_print(void)
{
puts("YES");
printf("%d\n",ans.size());
for(int i=;i<ans.size();i++)
printf("%d %d\n",ans[i].first,ans[i].second);
return;
} bool judge(void)
{
for(int i=;i<n;i++)
{
if(a[i]==aver) continue;
if(a[i]==aver+)
{
a[i]--; a[i+]++;
ans.push_back(pii(i,i+));
continue;
}
if(a[i]==aver-&&a[i+]>)
{
a[i]++; a[i+]--;
ans.push_back(pii(i+,i));
continue;
}
memcpy(a,b,sizeof(a));
ans.clear();
return false;
}
if(a[n]==aver&&a[]==aver) return true;
if(a[n]==aver+&&a[]==aver-)
{
ans.push_back(pii(n,));
return true;
}
if(a[n]==aver-&&a[]==aver+)
{
ans.push_back(pii(,n));
return true;
}
memcpy(a,b,sizeof(a));
ans.clear();
return false;
} int main(void)
{
int T; cin>>T;
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",b+i);
LL sum=;
for(int i=;i<=n;i++) sum+=b[i];
if(sum%n) {puts("NO");continue;}
aver=sum/(LL)n;
memcpy(a,b,sizeof(a));
ans.clear();
if(a[]>aver+||a[]<aver-) {puts("NO");continue;}
if(judge()){ans_print(); continue;}
if(a[])
{
ans.push_back(pii(,));
a[]--; a[]++;
if(judge()){ans_print(); continue;}
}
if(a[])
{
ans.push_back(pii(,));
a[]++; a[]--;
if(judge()){ans_print(); continue;}
}
puts("NO");
}
return ;
}

Aguin

1002 Bipartite Graph

1003 Cake

还是把这个补了。

比赛的时候spj写错。放过了很多队(包括我们。

先搜出n<=40的所有情况。

搜索的时候先贪心的找最大的。

最大的不行的时候再找小一点的。这样很快能找到一组解。

其实在1-20内贪心的答案都是对……产生了可以贪的错觉。

第一组不能贪得情况是23 6 。

在20-40一共有9组不能贪的。所以挑挑出来也可以。

n>40的情况不停的取最后的2*m个数字,然后头尾配对放到m组里面。直到n<=40。

然后和之前做好的n<=40的情况合并就好了。

 # include <iostream>
# include <cstdio>
# include <cstring>
# include <vector>
using namespace std;
typedef long long LL;
vector<int> ans[][][];
vector<int> tem_ans[];
int n,m;
bool vis[]; bool dfs(int i,int rem,int each)
{
if(!rem&&i==m)
{
for(int i=;i<=m;i++)
{
for(int j=;j<tem_ans[i].size();j++)
{
int x=tem_ans[i][j];
ans[n][m][i].push_back(x);
}
tem_ans[i].clear();
}
return true;
}
if(!rem&&dfs(i+,each,each)) return true;
for(int pos=n;pos>;pos--)
{
if(!vis[pos]&&pos<=rem)
{
vis[pos]=;
tem_ans[i].push_back(pos);
if(dfs(i,rem-pos,each)) return true;
tem_ans[i].pop_back();
vis[pos]=;
}
}
return false;
} int main(void)
{
for(n=;n<=;n++)
{
for(m=;m<=;m++)
{
int sum=n*(n+)/,each=sum/m;
if(sum%m||n<*m-) continue;
memset(vis,,sizeof(vis));
dfs(,each,each);
}
}
int T; cin>>T;
while(T--)
{
scanf("%d%d",&n,&m);
LL sum=(LL)n*LL(n+)/,each=sum/m;
if(sum%m||n<*m-) {puts("NO"); continue;}
puts("YES");
for(int i=;i<=m;i++) tem_ans[i].clear();
while(n>)
{
for(int i=;i<=m;i++)
{
tem_ans[i].push_back(n-i+);
tem_ans[i].push_back(n-*m+i);
}
n-=*m;
}
for(int i=;i<=m;i++)
{
printf("%d",ans[n][m][i].size()+tem_ans[i].size());
for(int j=;j<ans[n][m][i].size();j++)
printf(" %d",ans[n][m][i][j]);
for(int j=;j<tem_ans[i].size();j++)
printf(" %d",tem_ans[i][j]);
puts("");
}
}
return ;
}

Aguin

1004 Deal

1005 Easy Sequence

1006 First One

终于补了这个。简直感动哭。

因为做法知道了。一直卡在边界。

后来直接把power[0]改成0。把[0,1),[1,2)合成[0,2)。

然后只有在区间左端点合法的时候再加tem。

 # include <iostream>
# include <cstdio>
# include <algorithm>
using namespace std;
typedef long long LL;
# define maxn
LL sum[maxn],power[]; int main(void)
{
power[]=;
for(int i=;i<;i++) power[i]=power[i-]<<;
power[]=;
int T; cin>>T;
while(T--)
{
int n; scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%I64d",sum+i);
for(int i=;i<=n;i++) sum[i]+=sum[i-];
LL ans=;
for(int i=;i<;i++)
{
if(sum[n]<power[i]) break;
LL tem=,l=,r=;
for(int j=;j<=n;j++)
{
l=max(l,(LL)j);
while(l<n&&sum[l]-sum[j-]<power[i]) l++;
while(r<n&&sum[r+]-sum[j-]<power[i+]) r++;
if(sum[l]-sum[j-]>=power[i]) tem+=(l+r)*(r-l+)/+(r-l+)*(LL)j;
}
ans+=tem*(LL)(i+);
}
printf("%I64d\n",ans);
}
return ;
}

Aguin

1007 Group

1008 Hiking

先区间左端点升序排序。再以右端点为关键字搞个小根堆。

每次取右端点符合条件且最小的即可。

 # include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
# include <queue>
# include <vector>
using namespace std;
# define maxn
bool vis[maxn];
vector<int> ans; struct node
{
int id,l,r;
friend bool operator < (node a,node b)
{
return a.r>b.r;
}
} soda[maxn];
priority_queue <node> q; bool cmp(node a,node b)
{
return a.l<b.l;
} int main(void)
{
int T ;cin>>T;
while(T--)
{
int n; scanf("%d",&n);
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++) soda[i].id=i;
for(int i=;i<=n;i++) scanf("%d",&soda[i].l);
for(int i=;i<=n;i++) scanf("%d",&soda[i].r);
sort(soda+,soda++n,cmp);
int cnt=,pos=;
ans.clear();
while(!q.empty()) q.pop();
while(soda[pos].l==)
{
q.push(soda[pos]);
pos++;
if(pos>n) break;
}
while(!q.empty())
{
node tem=q.top(); q.pop();
if(tem.r<cnt) continue;
cnt++;
vis[tem.id]=;
ans.push_back(tem.id);
while(soda[pos].l==cnt)
{
q.push(soda[pos]);
pos++;
if(pos>n) break;
}
}
printf("%d\n",ans.size());
for(int i=;i<ans.size();i++) printf("%d ",ans[i]);
for(int i=;i<=n;i++) if(!vis[i]) printf("%d ",i);
printf("\n");
}
return ;
}

Aguin

1009 In Touch

1010 Just A String

1011 Key Set

组合数性质。

加和为2^n。奇偶和相等。

 # include <iostream>
# include <cstdio>
using namespace std;
typedef long long LL;
const LL mod=; LL Pow(LL m,LL n)
{
LL b=;
while(n>)
{
if(n&) b=(b*m)%mod;
n=n>>;
m=(m*m)%mod;
}
return b;
} int main(void)
{
int T ;cin>>T;
while(T--)
{
LL n; scanf("%I64d",&n);
n--;
LL ans=Pow(,n)-;
printf("%I64d\n",ans);
}
return ;
}

Aguin

2015 Multi-University Training Contest 6的更多相关文章

  1. 2015 Multi-University Training Contest 8 hdu 5390 tree

    tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...

  2. 2015 UESTC Winter Training #8【The 2011 Rocky Mountain Regional Contest】

    2015 UESTC Winter Training #8 The 2011 Rocky Mountain Regional Contest Regionals 2011 >> North ...

  3. 2015 UESTC Winter Training #7【2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest】

    2015 UESTC Winter Training #7 2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest 据 ...

  4. Root(hdu5777+扩展欧几里得+原根)2015 Multi-University Training Contest 7

    Root Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Su ...

  5. 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)

    官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...

  6. HDU 5360 Hiking(优先队列)2015 Multi-University Training Contest 6

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  7. hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)

    OO's Sequence                                                          Time Limit: 4000/2000 MS (Jav ...

  8. HDU5294 Tricks Device(最大流+SPFA) 2015 Multi-University Training Contest 1

    Tricks Device Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  9. hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)

    CRB and Tree                                                             Time Limit: 8000/4000 MS (J ...

  10. 2015多校联合训练赛 hdu 5308 I Wanna Become A 24-Point Master 2015 Multi-University Training Contest 2 构造题

    I Wanna Become A 24-Point Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 ...

随机推荐

  1. Signalr 实现心跳包

    项目分析: 一个实时的IM坐席系统,客户端和坐席使用IM通信,客户端使用android和ios的app,坐席使用web. web端可以保留自己的登录状态,但为防止意外情况的发生(如浏览器异常关闭,断网 ...

  2. css3-文字旋转

    <meta charset="utf-8"/><style> * {margin: 0; padding: 0;} ul { height: 80px; b ...

  3. FormsCookieName保存登录用户名的使用

    一,写一个类来实现 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  4. PyCharm基本使用

    调节PyCharm的背景颜色 File>Settings>Appearance&Behavior>Appearance 在PyCharm中切换Python解释器版本 File ...

  5. django模板系统基础

    模板系统基础Django模板是一个string文本,它用来分离一个文档的展现和数据 模板定义了placeholder和表示多种逻辑的tags来规定文档如何展现 通常模板用来输出HTML,但是Djang ...

  6. wf跟webx开源我见

    今天看WF的时候突然想到了WEBX!一个是58同城的优秀框架,一个是阿里巴巴集团的开源结晶,但是差距在哪里!随便在网上一搜webx,看到推广最上方的是一个网站,关于webx的官方认证网站,但是wf也开 ...

  7. Process Explorer(增强任务管理器) V16.05 免费绿色版

    软件名称: Process Explorer(增强任务管理器)软件语言: 中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 1.2MB图片预 ...

  8. Winform 无边框窗口移动自定义边框粗细颜色

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. Android系统签名文件

    系统签名所需要的工具 signapk.jar -------------------->out/host/linux-x86/framework/signapk.jar (build/tools ...

  10. 永洪BI配置测试及遇到的一些问题

    1.连oracle 11g数据库遇到密码不能验证通过. 在11g中, 数据库默认密码的大小写是敏感的,jdbc在给oracle密码时, 会将其变成大写.其他个别情况也会出现变成小写的. 为统一,去除o ...