编程之美第三题 序列变换tiyi

题意:   给你一个序列  ,  让你改变序列中的所有值,  最后保证序列变成一个绝对递增的序列   ,  也就是每个a[i+1] 〉a[i],   然后有一个消耗为 max | a[i] - b[i]|, 问消耗最小为多少。

题解:  很显然  最大值最小问题,  明显二分,  然后再保证第一个最小的同时  ,  后面的和第一个尽量靠近,  然后就A了    ,  这次编程之美比赛题目确实好水呀, 没sei了!

代码:

#include<stdio.h>
int n, mark[1000005], value[1000005];
int slove(int x)
{
   for(int i = 1; i <= n; i++)
   mark[i] = value[i];
  // if(x >= mark[1])   mark[1] = 1;
   mark[1] -= x;
   for(int i = 2; i <= n; i++)
   {
      if(mark[i] + x <= mark[i-1])
      return 0;
      if(mark[i] - x > mark[i-1])
      mark[i] -= x;
      else mark[i] = mark[i-1] + 1;
   }
   return 1;
}
int main()
{
   int T, flag1 = 1;
   scanf("%d", &T);
   while(T--)
   {
      scanf("%d", &n);
      int flag = 0, Max;
      scanf("%d", &value[1]);
      Max = value[1];
      for(int i = 2; i <= n; i++)
      {
          scanf("%d", &value[i]);
          if(value[i] <= value[i-1])
          flag = 1;
          if(Max < value[i])   Max = value[i];
      }
      printf("Case #%d:\n", flag1 ++);
      if(!flag)
      {
          printf("0\n");
          continue;
      }
      int l = 1, r = 1000004, mid, ans;
      while(l <= r)
      {
         mid = (r+l)/2;
        // printf("%d\n", mid);
         if(slove(mid))
         {
             ans = mid;
             r = mid - 1;
         }
         else l = mid + 1;
      }
      printf("%d\n", ans);
   }
} 
时间: 2024-10-25 12:46:47

编程之美第三题 序列变换tiyi的相关文章

编程之美资格赛 第二题 回文字符序列 dp

这是一道dp题,设置dp[i][j]代表的是从i到j之间的有多少个回文子串,dp[i][j] = dp[i][num[1]] +1+ dp[num[1]+1][j - 1]+1......+dp[num[j]][j-1] + 1 ,num[i] 代表的是与i字符相同的上一个字符的位置! 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", &quo

微软编程之美——回文字符序列

描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 限制 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据输出一行,格式为&q

英雄会题目解析- 第五届在线编程大赛月赛第三题:石子游戏

题目: 甲乙两人面对若干堆石子,其中每一堆石子的数目可以任意确定.两人轮流按下列规则取走一些石子,游戏的规则如下:1.每一步应取走至少一枚石子:2.每一步只能从某一堆中取走部分或全部石子:3.如果谁无法按规则取子,谁就是输家.如果甲乙两人都采取最优的策略,甲先拿,请问,是甲必胜还是乙必胜.输入格式:多组数据,每组数据两行,第一行是一个整数N, 2<=N<=10000下一行是N个正整数,代表每堆的石子数,石子数在32位整数内.输出格式:每组测试数据输出一行,如果甲存在必胜策略,输出"W

CSDN英雄会-第五届在线编程大赛月赛第三题:石子游戏(1)

题目详情 甲乙两人面对若干堆石子,其中每一堆石子的数目可以任意确定. 两人轮流按下列规则取走一些石子,游戏的规则如下: 1.每一步应取走至少一枚石子: 2.每一步只能从某一堆中取走部分或全部石子: 3.如果谁无法按规则取子,谁就是输家. 如果甲乙两人都采取最优的策略,甲先拿,请问,是甲必胜还是乙必胜. 输入格式: 多组数据,每组数据两行,第一行是一个整数N, 2<=N<=10000 下一行是N个正整数,代表每堆的石子数,石子数在32位整数内. 输出格式: 每组测试数据输出一行,如果甲存在必胜策

编程之美第三章-字符串移位包含的问题

#include<iostream> #include<string> using namespace std; bool find_str(string s1,string s2) { if(s1.empty()||s2.empty()) return false; string::size_type pos=s1.find(s2); return (pos!=string::npos)?true:false; } int main() { string s1; cin>&

编程之美第三章-3.2-电话号码以及对应的单词

#include<iostream> #include<string> using namespace std; const int max_length=9; char c[10][10]={ "",//0 "",//1 "ABC",//2 "DEF",//3 "GHI",//4 "JKL",//5 "MNO",//6 "PQRS&

2019美赛D题 人员疏散模型Python编程

Louvre_Evacuation 题目来源:2019年 美赛 D题 完整代码请见:https://github.com/izcat/Louvre_Evacuation 2019 ICM Problem D: Time to leave the Louvre 问题背景 法国发生的恐怖袭击越来越多,在许多热门目的地,亟需一个应对紧急情况的疏散计划. 你们的ICM团队正在帮助设计在法国巴黎卢浮宫的疏散计划. 总的来说,疏散的目标是让所有的人都撤离,尽快安全离开大楼. 接到疏散通知后,为了尽快清空建筑

四川大学线下编程比赛第三题:书本转移

好久没写过日志,也怪最近事情真的特别多,最近参加关于编程方面就是CSDN高校俱乐部举办的线下编程塞,说起这次编程赛,总共三道题,题目都可以在csdn高校俱乐部上看到,参加比赛的时候有点小紧张,第三题涉及到队列,当时的机器没有代码提示,坑...也怨自己平时写代码用惯了代码提示,很多stl的方法都是隐隐约约知道,但是具体的不知道,导致第三题没有做出来,遗憾哈!下面贴一下今天写的第三题的代码 题目 四川大学线下编程比赛第三题:书本转移 题目详情: 小强有 3 个箱子 A,B,C 用来装书,所有的书(一

nyoj 找球号三(除了一个数个数为基数,其他为偶数,编程之美上的)

#include<iostream> #include<stdio.h> using namespace std; int main() { int len; while(cin>>len) { int ans; len--; cin>>ans; while(len--) { int a; cin>>a; ans=ans^a; } cout<<ans<<endl; } system("pause");