这题昨天晚上花了我1个小时50多分钟来搞,都没有搞定。。后来看别人代码,直接暴力枚举第一个数的值来做。。最多1000*1000的复杂度。当时怎么就没想到呢?还有为啥我的方法不对呢。。

暴力方法代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #define Mod 1000000007
  7. using namespace std;
  8. #define N 1007
  9.  
  10. int a[N];
  11.  
  12. int main()
  13. {
  14. int n,k,i,j,tmp,maxi,cnt,now,mini;
  15. while(scanf("%d%d",&n,&k)!=EOF)
  16. {
  17. for(i=;i<=n;i++)
  18. scanf("%d",&a[i]);
  19. mini = Mod;
  20. for(i=;i<=;i++)
  21. {
  22. cnt = ;
  23. tmp = i;
  24. for(j=;j<=n;j++)
  25. {
  26. if(a[j] != tmp)
  27. cnt++;
  28. tmp += k;
  29. }
  30. if(cnt < mini)
  31. {
  32. mini = cnt;
  33. now = i;
  34. }
  35. }
  36. printf("%d\n",mini);
  37. tmp = now;
  38. for(i=;i<=n;i++)
  39. {
  40. if(a[i] > tmp)
  41. printf("- %d %d\n",i,a[i]-tmp);
  42. else if(a[i] < tmp)
  43. printf("+ %d %d\n",i,tmp-a[i]);
  44. tmp += k;
  45. }
  46. }
  47. return ;
  48. }

自己的做法:

做一个参考数组b[],存放1,1+k,1+2k....1+(n-1)k,然后a,b两数组(a为原数组)个元素相减,得出差值数组cha,且将cha复制一份给cha2,将cha2从大到小排序,得出差值大于0的最大连续相同的差值(差值小于0肯定不行,因为从1开始的b数组是底线,比b还小说明会小于0,与题意不符),以最大连续差值的这些数为基准,这些数不变,将其他数变为使整个数组满足Ai+1-Ai = k,此时形成标准数组biao[],然后比较a[]和biao[],得出操作数和操作序列。但是就是不对,,不知道为啥,那位好心人如果发现这样那里不对欢迎向我指出,谢谢。

自己代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #define Mod 1000000007
  7. using namespace std;
  8. #define N 1007
  9.  
  10. int a[N],biao[N],cha[N],b[N],cha2[N];
  11.  
  12. int cmp(int ka,int kb)
  13. {
  14. return ka>kb;
  15. }
  16.  
  17. int main()
  18. {
  19. int n,k,i,j,flag;
  20. while(scanf("%d%d",&n,&k)!=EOF)
  21. {
  22. for(i=;i<=n;i++)
  23. scanf("%d",&a[i]);
  24. for(i=;i<=n;i++)
  25. b[i] = +(i-)*k;
  26. for(i=;i<=n;i++)
  27. {
  28. cha[i] = a[i]-b[i];
  29. cha2[i] = cha[i];
  30. }
  31. sort(cha2+,cha2+n+,cmp);
  32. int cnt = ;
  33. int maxi = ;
  34. for(i=;i<=n;i++)
  35. {
  36. if(cha2[i] < )
  37. break;
  38. if(cha2[i] == cha2[i-])
  39. cnt++;
  40. else
  41. {
  42. if(cnt > maxi)
  43. {
  44. maxi = cnt;
  45. flag = cha2[i-];
  46. cnt = ;
  47. }
  48. }
  49. }
  50. if(cnt > maxi)
  51. {
  52. maxi = cnt;
  53. flag = cha2[i-];
  54. }
  55. for(i=;i<=n;i++)
  56. {
  57. if(cha[i] == flag)
  58. {
  59. break;
  60. }
  61. }
  62. for(j=i;j>=;j--)
  63. biao[j] = a[i]-k*(i-j);
  64. for(j=i+;j<=n;j++)
  65. biao[j] = a[i]+k*(j-i);
  66. cnt = ;
  67. for(i=;i<=n;i++)
  68. {
  69. if(a[i]!=biao[i])
  70. cnt++;
  71. }
  72. printf("%d\n",cnt);
  73. for(i=;i<=n;i++)
  74. {
  75. if(a[i] != biao[i])
  76. {
  77. if(a[i] > biao[i])
  78. {
  79. printf("- %d %d\n",i,a[i]-biao[i]);
  80. }
  81. else
  82. printf("+ %d %d\n",i,biao[i]-a[i]);
  83. }
  84. }
  85. }
  86. return ;
  87. }

Codeforces 402B --耻辱的一题的更多相关文章

  1. Codeforces#441 Div.2 四小题

    Codeforces#441 Div.2 四小题 链接 A. Trip For Meal 小熊维尼喜欢吃蜂蜜.他每天要在朋友家享用N次蜂蜜 , 朋友A到B家的距离是 a ,A到C家的距离是b ,B到C ...

  2. You Are Given a Decimal String... CodeForces - 1202B [简单dp][补题]

    补一下codeforces前天教育场的题.当时只A了一道题. 大致题意: 定义一个x - y - counter :是一个加法计数器.初始值为0,之后可以任意选择+x或者+y而我们由每次累加结果的最后 ...

  3. codeforces 1165F1/F2 二分好题

    Codeforces 1165F1/F2 二分好题 传送门:https://codeforces.com/contest/1165/problem/F2 题意: 有n种物品,你对于第i个物品,你需要买 ...

  4. Codeforces 675C Money Transfers 思维题

    原题:http://codeforces.com/contest/675/problem/C 让我们用数组a保存每个银行的余额,因为所有余额的和加起来一定为0,所以我们能把整个数组a划分为几个区间,每 ...

  5. Topcoder SRM 619 DIv2 500 --又是耻辱的一题

    这题明明是一个简单的类似约瑟夫环的问题,但是由于细节问题迟迟不能得到正确结果,结果比赛完几分钟才改对..耻辱. 代码: #include <iostream> #include <c ...

  6. Codeforces Gym 100531G Grave 水题

    Problem G. Grave 题目连接: http://codeforces.com/gym/100531/attachments Description Gerard develops a Ha ...

  7. Codeforces 1137D - Cooperative Game - [交互题+思维题]

    题目链接:https://codeforces.com/contest/1137/problem/D 题意: 交互题. 给定如下一个有向图: 现在十个人各有一枚棋子(编号 $0 \sim 9$),在不 ...

  8. Codeforces 767B. The Queue 模拟题

    B. The Queue time limit per test:1 second memory limit per test:256 megabytes input:standard input o ...

  9. 多种方法过Codeforces Round #270的A题(奇偶法、打表法和Miller_Rabin(这个方法才是重点))

    题目链接:http://codeforces.com/contest/472/problem/A 题目: 题意:哥德巴赫猜想是:一个大于2的素数一定可以表示为两个素数的和.此题则是将其修改为:一个大于 ...

随机推荐

  1. 数据库设计==>>MySchool

    1.数据库设计的步骤 第一步:需求分析(收集信息) 第二步:绘制 E-R 图 (标示实体 ,找到实体的属性 第三步:将 E-R 图转换成数据库模型图 第四步:将数据库模型图转换成数据表 2.如何绘制 ...

  2. 编写运行R脚本

    1.在后台运行R 1.1 创建file.R文件 1.2 在文件首行键入: #! /path/to/Rscript 1.3 在下面的行中,键入R代码 1.4 保存(记得有png(),jpeg(),... ...

  3. gulp学习

    中文文档:http://www.gulpjs.com.cn/docs/api/ 一.gulp的API 1 gulp.src(); 这个方法是用来获取流的,但这个流里的内容不是原始的文件流,而是一个虚拟 ...

  4. MapGIS转Shp文件的单位问题

    在MapGIS浏览查看一下数据,各种不习惯:用mapgis自带的转shp功能,属性表会出错:利用名为map2shp的试用版软件可将mapgis格式的数据较为良好转成shp格式.但经常会遇到一个单位问题 ...

  5. UIView与CALayer的区别

    1.UIView相比CALayer最大区别是UIView可以响应用户事件,而CALayer不可以.UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制. 2.UIView和CALaye ...

  6. 傅里叶:有关FFT,DFT与蝴蝶操作(转 重要!!!!重要!!!!真的很重要!!!!)

    转载地址:http://blog.renren.com/share/408963653/15068964503(作者 :  徐可扬) 有没有!!! 其实我感觉这个学期算法最难最搞不懂的绝对不是动态规划 ...

  7. 监听spring加载完成后事件

    有这个想法是在很早以前了,那时的我没有接触什么缓存技术,只知道hibernate有个二级缓存.没有用过memcache,也没有使用过redis. 只懂得将数据放到数组里或者集合里,一直不去销毁它(只有 ...

  8. mysql 命令行

    drop database mustang; create database mustang; show databases; use database mustang; show tables; s ...

  9. leangoo更换背景、设置颜色标签功能上线啦!

    leangoo看板背景太单调?卡片标签想要添加多个?没有问题,Leangoo的本次更新就给大家带来了漂亮背景和实用的颜色标签设置,接下来就让我们一起来看看吧! 设置背景: 点击看板右上角个人头像图标按 ...

  10. Erlang数据类型的表示和实现(4)——boxed 对象

    Boxed 对象 Boxed 对象是比较复杂的对象,在 Erlang 中主标签为 10 的 Eterm 表示一个对 boxed 对象的引用.这个 Eterm 除去标签之后剩下的实际上是一个指针,指向具 ...