2015 Multi-University Training Contest 6
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的更多相关文章
- 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 ...
- 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 ...
- 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 据 ...
- 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 ...
- 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)
官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...
- 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 ...
- hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)
OO's Sequence Time Limit: 4000/2000 MS (Jav ...
- 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 ...
- hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)
CRB and Tree Time Limit: 8000/4000 MS (J ...
- 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 ...
随机推荐
- 在网页边角添加GitHub链接图标
在网页边角添加GitHub链接图标 在页面添加HTML一下代码: <a href="https://github.com/you"> <img style=&qu ...
- 为何没有.aspx.designer.cs文件?
designer.cs 是窗体设计器生成的代码文件,作用是对窗体上的控件做初始化工作(在函数InitializeComponent()中)VS2003以前都把这部分代码放到窗体的cs文件中,由于这部分 ...
- [ mysql优化一 ] explain解释select语句
NOSQL 没有什么数据表, 只是一些变量,key_value ,redis 支持的变量比较多.可以持久化文件到硬盘上. mysql 关系型数据库 ,表和表中间有各种id的关系. 缺点 高并发读 ...
- JSON文件处理
牛X的JSON解析JSON字符串显示字典键值 public void ResolveJson() { //定义的JSON字符串,注意JSON的格式 string str = @” { “”Name”” ...
- os库-时间函数
一.时间的三种格式 1.用数值表示时间值 (时间戳)用数字值来表示时间值,实际上时间值的本质就是一个数字值.例如:d = 1131286477 这里的 1131286477 是一个以秒为单位的 格林威 ...
- Wise Registry Cleaner Pro(智能注册表清理) V9.31 绿色版
软件名称: Wise Registry Cleaner Pro(智能注册表清理)软件语言: 简体中文授权方式: 免费试用运行环境: Win7 / Vista / Win2003 / WinXP 软件大 ...
- jqery总结
- SVN解锁失败的解决办法
背景:在版本发布后,本人把工程文件上锁后,进行过修改但没有进行上传.后面一段时间后,开发人员需要进行修改提交,发现解锁不成功. 使用解锁命令时:提示如下: If you want to break t ...
- .Net cxy 提高效率
Visual Studio Visual Studio Productivity Power tool: VS 专业版的效率工具. Web Essentials: 提高开发效率,能够有效的帮助开发人员 ...
- 使用javassist运行时动态重新加载java类及其他替换选择
在不少的情况下,我们需要对生产中的系统进行问题排查,但是又不能重启应用,java应用不同于数据库的存储过程,至少到目前为止,还不能原生的支持随时进行编译替换,从这种角度来说,数据库比java的动态性要 ...