2015 多校联赛 ——HDU5353(构造)
来源:互联网 发布:破解摄像头软件下载 编辑:程序博客网 时间:2024/05/29 14:58
Each soda has some candies in their hand. And they want to make the number of candies the same by doing some taking and giving operations. More specifically, every two adjacent soda
1.
2.
3. they just do nothing.
Sample Input
361 0 1 0 0 051 1 1 1 131 2 3
Sample Output
NOYES0YES22 13 2
对相邻两个数之间进行以下三种操作的一种,最后使他们相等
①a++ b-- ②a-- b++ ③nothing
如果(sum%n != 0),直接失败。用一个数组来记录数与平均数之间的差值。
先枚举第一位数的三种情况,
当C[i] == 1时,从C[i+1]取一;
当C[i] == -1时,给C[i+1]一个;
当C[i] == 0时,nothing;
else:false。
ps:完全没想到要对第一位进行枚举 OoO,一直wa
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#pragma comment(linker, "/STACK:102400000,102400000")using namespace std;typedef long long ll;const int mod = 1000000007;int a[100050];int aver,flag,n;int p[100050][2];int c[100050];int tot;bool solve(){ for(int i = 3; i <= n; i++) c[i] = a[i]; for(int i = 2; i <= n; i++) { if(c[i] == 0) continue; else if(c[i] == 1 && i != n) { c[i+1]++; c[i]--; p[tot][0] = i; p[tot++][1] = i+1; } else if(c[i] == 1 && i == n) { c[1]++; c[i]--; p[tot][0] = i; p[tot++][1] = 1; } else if(c[i] == -1 && i!= n) { c[i]++; c[i+1]--; p[tot][0] = i+1; p[tot++][1] = i; } else if(c[i] == -1 && i== n) { c[i]++; c[1]--; p[tot][0] = 1; p[tot++][1] = i; } else if(c[i] >1 || c[i] < -1) return false; } for(int i = 1; i <= n; i++) if(c[i]!=0) return false; return true;}void prin(){ printf("YES\n"); printf("%d\n",tot); for(int i = 0; i < tot; i++) printf("%d %d\n",p[i][0],p[i][1]);}int main(){ int T; //freopen("01.txt","r",stdin); scanf("%d",&T); while(T--) { scanf("%d",&n); ll sum = 0; memset(p,0,sizeof(p)); for(int i = 1; i <= n; i++) { scanf("%d",&a[i]); sum += a[i]; } if(sum % n) { printf("NO\n"); continue; } aver = sum / n; flag = 0; tot = 0; for(int j = 1; j <= n; j++) a[j] =a[j] - aver; c[1] = a[1]; c[2] = a[2]; if(solve()) { prin(); } else { tot = 0; c[1] = a[1] - 1; c[2] = a[2] + 1; p[tot][0] = 1; p[tot++][1] = 2; if(solve()) prin(); else { tot = 0; c[1] = a[1] + 1; c[2] = a[2] - 1; p[tot][0] = 2; p[tot++][1] = 1; if(solve()) prin(); else printf("NO\n"); } } } return 0;}
0 0
- 2015 多校联赛 ——HDU5353(构造)
- 2015 多校联赛 ——HDU5302(构造)
- 2015 多校联赛 ——HDU5334(构造)
- HDU5353.Average(多校第六场)
- hdu5353||2015多校联合第六场1001 贪心
- 2015 多校联赛 ——HDU5289(二分+ST)
- 2015多校联赛 ——HDU5288(数学)
- 2015 多校联赛 ——HDU5299(树删边)
- 2015 多校联赛 ——HDU5305(搜索)
- 2015 多校联赛 ——HDU5303(贪心)
- 2015 多校联赛 ——HDU5301(技巧)
- 2015 多校联赛 ——HDU5319(模拟)
- 2015 多校联赛 ——HDU5323(搜索)
- 2015 多校联赛 ——HDU5316(线段树)
- 2015 多校联赛 ——HDU5325(DFS)
- 2015 多校联赛 ——HDU5335(Walk out)
- 2015 多校联赛 ——HDU5344(水)
- 2015 多校联赛 ——HDU5349(水)
- C/C++ 语言中 sprintf() 函数的用法
- memcached源码分析之线程池机制(二)
- 在poll的admin文件下添加,date_hierarchy = 'pub_date'字段会报错
- Android Studio配置Github
- WEB网站测试
- 2015 多校联赛 ——HDU5353(构造)
- Android studio SDK下载相应版本的Android源码
- hdu3549 最大流模板题
- Roman to Integer
- 匿名内部类
- dojox.grid.DataGrid 编程篇(一)- 方法与事件
- avocwozkgwbrnak
- FAST RCNN安装配置精华
- oracle创建和维护表