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 ...
随机推荐
- 前端知识点-CSS相关知识点
1.解释一下CSS的盒子模型? 回答一: a.标准的css盒子模型:宽度=内容的宽度+边框的宽度+加上内边具的宽度 b.网页设计中常听的属性名:内容(content).填充(padding).边框(b ...
- 基于html5 canvas 的强大图表插件【Chart.js】
名词解释 Chart.js:是基于html5和canvas的强大图表插件,支持多样的图表形式,柱状线性饼环极地雷达等等: canvas:只兼容到IE9 excanvas.js:强大的第三方兼容插件,可 ...
- Centos 下安装Zabbix Linux 客户端
今天在linux上安装了客户端,过程如下: (1)下载zabbix客户端软件 wget www.zabbix.com/downloads/2.0.3/zabbix_agents_2.0.3.linux ...
- 设计模式-GoF23
书呢,是2012年双11买的. 没有面向对象程序经验的人,果然还是看不懂的.
- 《C程序设计语言》 squeeze函数(从字符串s中删除字符c)
squeeze void squeeze(char string[], int ch) { int i, j; ; string[i] != '\0'; i++) { if (string[i] != ...
- 手动安装VS code 插件
现在安装包: 通过修改下面的地址参数:https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publish ...
- C#拾遗(二、函数)
1. 参数数组.C#的特色,允许函数参数的最后指定一个参数数组,可以使用个数不定的参数调用,用params关键字定义 static double SumVals(params double[] val ...
- FD.io VPP 技术Neutron VNF vRouter 实现
在OpenStack Neutron中主要有三种网络设备,路由器(Router),负载均衡器(LB)以及VPN,其中Router作为基础网络设备起到连接子网到子网.内网到外网的作用.不同子网之间的访问 ...
- mysql innodb存储引擎和myisam引擎
InnoDb存储引擎面向在线事务处理,其特点是行锁设计.支持外键.并支持Oricle似得非锁定读(所谓非锁定读是如果数据库实例读取的行正在进行更新或删除操作当前读取不会等待当前锁的释放而是读取当前行的 ...
- 闭包&装饰器详解
闭包 先不着急看闭包的定义,让我们从一段示例代码开始.如果将上一个示例稍微修改下: >>> def outer(): ... x = 1 ... def inner(): ... p ...