题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5353

题意:有n个人围城一个环,每一个人手里都有一些糖果,第i个人有ai块。现在有三种操作:第i个人给第i+1个人一块。第i+1个人给第i个人一块。什么都不做。第i个人和第i+1个人之间,可以选择一种操作并执行,问最终能不能让所有人手里的糖相等。

解法:贪心。

当n = 1 时,永远是YES

当n = 2 时,注意1和2之间只能有一种操作,不存在循环。

当n > 2 时:

糖的总数不能均分到n个人手中,直接NO

可以分开,存在一个循环,那么枚举第1个人对第2个人的操作,那么对于第2个人及以后的人来说它的左侧已经确定了,那么它为了维护自己的糖数是平均值,只能对下一个人进行操作,如果当前比平均值少1,那么从下一个人手里拿一个,如果正好,那么不操作,如果多一个,那么给下面的人一个,其他情况都是无解的。

注意:在操作时,要保证它当前有糖。所以要判断一下。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+6;
typedef long long LL;
int a[maxn], ans[maxn]; int main()
{
int T, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
LL sum = 0, ave = 0;
for(int i=0; i<n; i++){
scanf("%d", &a[i]);
sum += a[i];
}
bool flag = 1;
int num;
ave = sum/n;
memset(ans, 0, sizeof(ans));
if(sum%n){
flag = 0;
}
else if(n == 2){
if(abs(a[0]-ave) >= 2) flag = 0;
else if(abs(a[0]-ave)){
ans[0]=a[0]>a[1]?1:-1;
}
}
else if(n>2){
int i,j,k;
for(i=-1; i<=1; i++){
ans[0]=i;
for(j=1; j<n; j++){
k=a[j]+ans[j-1];
if(k==ave) ans[j]=0;
else if(k+1==ave){
if(a[(j+1)%n]) ans[j]=-1;
else break;
}
else if(k-1==ave){
ans[j]=1;
}
else break;
}
if(j==n&&a[0]-ans[0]+ans[n-1]==ave) break;
}
if(i==2) flag = 0;
}
if(flag==0){
puts("NO");
}
else{
puts("YES");
num = 0;
for(int i=0; i<n; i++) if(ans[i]) num++;
printf("%d\n", num);
for(int i=0; i<n; i++){
if(!ans[i]) continue;
int u = i+1;
int v = (i+1)%n+1;
if(ans[i]==-1) swap(u, v);
printf("%d %d\n", u, v);
}
}
}
return 0;
}

2015多校第6场 HDU 5353 Average 贪心,细节处理的更多相关文章

  1. 2015多校第6场 HDU 5355 Cake 贪心,暴力DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5355 题意:给你n个尺寸大小分别为1,2,3,…,n的蛋糕,要求你分成m份,要求每份中所有蛋糕的大小之 ...

  2. 2015多校第6场 HDU 5360 Hiking 贪心,优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须 ...

  3. 2015多校第6场 HDU 5354 Bipartite Graph CDQ,并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5354 题意:求删去每个点后图是否存在奇环(n,m<=1e5) 解法:很经典的套路,和这题一样:h ...

  4. 2015多校第6场 HDU 5361 并查集,最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...

  5. 2015多校第6场 HDU 5358 First One 枚举,双指针

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5358 题意:如题. 解法:观察式子发现,由于log函数的存在,使得这个函数的值域<=34,然后我 ...

  6. 2015多校第9场 HDU 5405 Sometimes Naive 树链剖分

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5405 题意: 给你一棵n个节点的树,有点权.        要求支持两种操作: 操作1:更改某个节点的 ...

  7. 2015多校第8场 HDU 5382 GCD?LCM! 数论公式推导

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5382 题意:函数lcm(a,b):求两整数a,b的最小公倍数:函数gcd(a,b):求两整数a,b的最 ...

  8. 2015多校第7场 HDU 5378 Leader in Tree Land 概率DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5378 题意:一棵n个节点的树.对其节点进行标号(1~n).求恰好存在k个节点的标号是其节点所在子树的最 ...

  9. 2015多校第7场 HDU 5379 Mahjong tree 构造,DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5379 题意:一颗n个节点n-1条边的树,现在要给每个节点标号(1~n),要求:(1)每一层的兄弟节点的 ...

随机推荐

  1. Python Collections详解

    Python Collections详解 collections模块在内置数据结构(list.tuple.dict.set)的基础上,提供了几个额外的数据结构:ChainMap.Counter.deq ...

  2. BZOJ4247 挂饰(动态规划)

    相当于一个有负体积的背包.显然如果确定了选哪些,应该先把体积小的挂上去.于是按体积从小到大排序,就是一个裸的背包了. #include<iostream> #include<cstd ...

  3. 【题解】Atcoder ARC#90 F-Number of Digits

    Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...

  4. [BZOJ4589]Hard Nim

    description BZOJ 题意:\(n\)堆式子,每堆石子数量为\(\le m\)的质数,对于每一个局面玩\(Nim\)游戏,求后手必胜的方案数. data range \[n\le 10^9 ...

  5. [CF1083C]Max Mex

    题目大意:有一棵$n(n\leqslant2\times10^5)$个点的树,每个点有点权,所有的点权构成了$0\sim n-1$的排列.$q(q\leqslant2\times10^5)$次操作,操 ...

  6. 洛谷 P3332 [ZJOI2013]K大数查询 解题报告

    P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\) ...

  7. Tomcat启动web项目报Bad version number in .class file (unable to load class ...)错误的解决方法

    一.发现问题:启动 tomcat 控制台报该错误.   二.原因:tomcat 的 jdk 版本和编译.class的 jdk 版本不一致.   三.解决办法:   步骤一: 查看 MyEclipse ...

  8. Navicat新建查询快捷键

    在Navicat中,我们选中一个表,双击打开,这是如果要新建查询这个表的sql语句,可以直接用快捷键  ctrl+q 会自动打开查询窗口,并直接写好 sql:select * from (当前打开的表 ...

  9. JS实现的随机乱撞的彩色圆球特效代码

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. iOS开发ARC机制下的内存管理技术要点

    转载一篇: iOS开发ARC内存管理技术要点.ARC内存管理原则总结.iOS ARC内存管理总结 ARC内存管理机制 (一)ARC的判断准则: 只要没有任何一个强指针指向该对象,该对象就会被释放. ( ...