就是贪心啊,不知道为啥总是不过,总是WA

方法不对吗?

将数组扩展一倍,从左到右扫描,大于平均数就给右边的,小于就从右边拿,等于就不变,记录下操作类型。

大于2直接NO,不知道哪错了,自己出了一些数据也都过了

路过的大神多瞄一眼

多校每周只有两场,还是尽量把题全过了吧

  1 #pragma comment(linker, "/STACK:102400000,102400000")
  2 #include <iostream>
  3 #include <cstdio>
  4 #include <fstream>
  5 #include <algorithm>
  6 #include <cmath>
  7 #include <deque>
  8 #include <vector>
  9 #include <queue>
 10 #include <string>
 11 #include <cstring>
 12 #include <map>
 13 #include <stack>
 14 #include <set>
 15 #define LL long long
 16 #define INF 0x3f3f3f3f
 17 #define MAXN 200005
 18 using namespace std;
 19 struct Node
 20 {
 21     int x, y;
 22     Node(int x = 0, int y = 0):x(x), y(y){};
 23 };
 24 vector<Node> res;
 25 int n;
 26 LL sum;
 27 LL a[MAXN];
 28 int f[MAXN];
 29 int main()
 30 {
 31 #ifndef ONLINE_JUDGE
 32     freopen("in.txt", "r", stdin);
 33     //freopen("out.txt", "w", stdout);
 34 #endif // OPEN_FILE
 35    int T;
 36    scanf("%d", &T);
 37    for(int cas = 1; cas <= T; cas++){
 38         scanf("%d", &n);
 39         sum = 0;
 40         for(int i = 1; i <= n; i++){
 41             scanf("%d", &a[i]);
 42             a[i + n] = a[i];
 43             sum += a[i];
 44         }
 45         if(sum % n != 0){
 46             printf("NO\n");
 47             continue;
 48         }
 49         LL ave = sum / n;
 50         memset(f, 0, sizeof(f));
 51         bool noans = false;
 52         for(int i = 1; i < 2 * n; i++){
 53             if(a[i] == ave){
 54                 continue;
 55             }
 56             if(a[i] < ave){
 57                 if(ave - a[i] > 2){
 58                     noans = true;
 59                     break;
 60                 }
 61                 a[i]++;
 62                 a[i + 1]--;
 63                 f[i] = 1;
 64                 continue;
 65             }
 66             if(a[i] > ave){
 67                 if(a[i] - ave > 2){
 68                     noans = true;
 69                     break;
 70                 }
 71                 a[i]--;
 72                 a[i + 1]++;
 73                 f[i] = -1;
 74             }
 75         }
 76         if(noans){
 77             printf("NO\n");
 78             continue;
 79         }
 80         noans = true;
 81         int cnt = 1;
 82         int pos = 0;
 83         for(int i = 2; i <= 2 * n; i++){
 84             if(a[i] == a[i - 1]){
 85                 cnt++;
 86             }
 87             else{
 88                 cnt = 1;
 89             }
 90             if(cnt == n){
 91                 noans = false;
 92                 pos = i;
 93                 break;
 94             }
 95         }
 96         if(noans){
 97             printf("NO\n");
 98             continue;
 99         }
100         printf("YES\n");
101         int x, y;
102         res.clear();
103         for(int i = pos - n + 1; i <= pos; i++){
104             if(f[i] == 0){
105                 continue;
106             }
107             if(f[i] == 1){
108                 x = i + 1;
109                 y = i;
110             }
111             else{
112                 x = i;
113                 y = i + 1;
114             }
115             if(x > n){
116                 x -= n;
117             }
118             if(y > n){
119                 y -= n;
120             }
121             res.push_back(Node(x, y));
122         }
123         printf("%d\n", res.size());
124         for(int i = 0; i < res.size(); i++){
125             printf("%d %d\n", res[i].x, res[i].y);
126         }
127    }
128 }

转载于:https://www.cnblogs.com/macinchang/p/4712786.html

HDU 5353 Average 贪心相关推荐

  1. HDU 1036 Average is not Fast Enough!:题目解答源码

    2019独角兽企业重金招聘Python工程师标准>>> HDU 1036 Average is not Fast Enough!:题目解答源码 A relay is a race f ...

  2. hdu 5248(二分+贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5248 解题思路:这道题我原本的思路是动态规划,结果看到数很大,结果放弃了.然后想到二分,思路是对的,只 ...

  3. hdu 5246(贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5246 解题思路:先排序,在采用贪心的方法,先给百小度找到合适的初始战斗力,找到比初始战斗力上限小的中最 ...

  4. hdu 4296 Buildings (贪心)

    http://acm.hdu.edu.cn/showproblem.php?pid=4296 题意: 给出n个石板的重量w和它的承受能力s,将这n个石板累在一起,这样每个石板都有一个PDV = (Σw ...

  5. HDU - 6438(贪心+思维)

    链接:HDU - 6438 题意:给出 n ,表示 n 天.给出 n 个数,a[i] 表示第 i 天,物品的价格是多少.每天可以选择买一个物品,或者卖一个已有物品,也可以什么都不做,问最后最大能赚多少 ...

  6. HDU 4023 (博弈 贪心 模拟) Game

    如果硬要说这算是博弈题目的话,那这个博弈是不公平博弈(partizan games),因为双方面对同一个局面做出来的决策是不一样的. 我们平时做的博弈都是公平博弈(impartial games),所 ...

  7. HDU - 6746 Civilization(贪心+模拟)

    题目链接:点击查看 题目大意:中文题面 题目分析:一道比赛时写崩了的模拟,赛后参考别人的代码,发现原来这个题目可以写的如此简单 说会题目,n 只有 500 ,可以 n * n 枚举每个位置作为起点,对 ...

  8. 给我往死里贪!——24行代码AC_今年暑假不AC HDU - 2037(贪心模板讲解)

    励志用少的代码做高效表达 思路分析: 贪心算法模板题 贪心算法简单来讲即自顶向下,求解出每个子最优解,且每个子问题不会对下一个问题产生影响 该题算法模型为: 1.若每次选取开始时间最早的节目,无法求出 ...

  9. HDU 4864 Task(贪心或高斯消元)

    题意:n台机器工作时间为ai,等级bi,m个任务需要时间ai,等级bi,一台机器只能完成一个任务,完成一个任务收益为500*ai+2*bi,求最大收益:(n,m>100000) 思路:先从大到小 ...

  10. HDU 5835 Danganronpa 贪心

    Danganronpa 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5835 Description Chisa Yukizome works as ...

最新文章

  1. 基于AVR和MT8870的远程家电控制系统设计
  2. ABP 拦截器不工作
  3. 课堂经验值管理小程序_微信小程序怎么管理门店?
  4. java时间比较大小_Go、Java 和 Rust 的比较:得出了挺多结论
  5. java与python难度对比_Python和Java的区别,看完这篇文章你就清楚啦
  6. 深入解析JQuery中的isPlainObject()使用方法
  7. java集成测试_基于TestNG+Mockito及自动装配注解的Spring MVC集成测试
  8. 多层感知机和神经网络的区别_1.3 多层感知机
  9. FIFO算法与LRU算法
  10. mac系统使用技巧链接汇总
  11. 米线店结账程序 装饰着模式_云南大学《设计模式》实验报告2_装饰者模式.doc...
  12. 基于STM32构建EtherCAT主站(SOEM方案)5
  13. java jwt 单点登录_jwt技术实现系统间的单点登录
  14. 计算机语言的正交性,什么是“正交性”?
  15. 天问: 世界到底由什么组成?
  16. ATTCK v12版本战术介绍持久化(三)
  17. Easyexcel 获取表格具体位置的内容
  18. 美团数据分析岗面试题+解题思路
  19. 我跨过山和大海,穿过人山人海,只为寻找到你
  20. 变形金刚图片----汽车人

热门文章

  1. P1018 乘积最大(高精度加/乘)
  2. WebApi 基于token的多平台身份认证架构设计
  3. 【OOB】MSHTML!CPaste­Command::Convert­Bitmapto­Png heap-based buffer overflow学习
  4. ThinkPHP第十九天(Ueditor高亮插件、扩展函数载入load、静态缓存)
  5. 输入框输入文字字符匹配
  6. umount强制卸载不起作用,卸载光驱终极办法---fuser
  7. 使用SecureCRT在远程主机和本地之间传输文件
  8. ubuntu16系统中pycharm下使用git将代码提交到github仓库
  9. 用Jmeter+Badboy+Fiddler做接口测试
  10. iphone GCDAsyncSocket 详解