百度之星第一场选拔赛第一题

这题其实不是很难,最后提交的代码有个地方考虑错了,如果数据全部是1的话答案应该是0,我的输出居然是n-1哎。。。悲剧,现在只能求宏哥。。给点力,不要出现全部是1的数据。。此题首先要知道一个事情,每一种图标的情况等于第一次出现此种图标和最后一次出现这种图标之间的距离,然后就可以依次类推:

比如说样例数据

8 3

3 3 2

那么只会是这种情况达到最大321......123(1代表第一种,2代表第二种...),算完一次,就减掉最外面的那一对,第二种的情况就变成了21......12因此中间的都是浮云,只需要计算m次就可以了,正确代码很短:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int n, m;
    int a;
    while (scanf("%d %d", &n, &m) != EOF)
    {
          long long ans = 0;
          for (int i = 0; i < m; i ++){
              scanf("%d", &a);
              if (a>1){   
                 ans += n-1;
                 n -= 2;
              }
          } 
          printf("%I64d/n", ans);
         
    }
    return 0;   
}

你可能感兴趣的:(百度之星第一场选拔赛第一题)