牛客网 第十八届浙大城市学院程序设计竞赛(同步赛)J--万万没想到 啦啦啦啦啦

我觉得我可以继续wa下去(手动魔鬼笑)--------------------------------------------

 

原题链接https://ac.nowcoder.com/acm/contest/12986/J

示例1

输入

5 1
5 2 3 4 1

输出

0 0 0 0 0
示例2

输入

6 1
1 1 4 5 1 4

输出

0 0 3 4 0 3




题意
给定n个数, 每次操作使所有正整数-1, 直到没有任何一个数==k

思路
我们的目的是把所有>=k的数操作完后!=k, 那......找到大家减去的数就可了
另开个数组, 排序, 先找到==k的地方, 后面只要是a[i]-a[i-1]==1, 就res ++;(res为最后所有数减去的值)
如果有间断使得a[i]-a[i-1]>1, 那么停止进行, res就不再变了.
a[i]-a[i-1]==0没事, 继续continue计算res就行

出错点
对>=k的数操作就行, 我当时是对整体从头开始操作的, 然而, 队友都过了, 这个题, 呜呜呜, 只有我没过


代码
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1e6 + 10;
int a[N], b[N];

int main()
{
    int n, k, res;
    cin >> n >> k;
    
    for(int i = 0; i < n; i ++)
        cin >> a[i], b[i] = a[i];
    sort(b, b + n);
    
    res = 0;
    
    int l = n;
    for(int i = 0; i < n; i ++)
         if(b[i] == k)
         {
             l = i;
             res++;//找到了k, 那么就得先-1, 咱总不能找到了最后减去的是0吧
             break;
         }
    for(int i = l; i < n-1; i ++)
        if(b[i+1] - b[i] == 1)
             res ++;
       else if(b[i+1]!=b[i])   break;
          
    for(int i = 0; i < n; i ++)
    {
        cout << max(0, a[i] - res);//小于0那输出0, 题目要求
        if(i != n-1)
            printf(" ");
    }       
    return 0;
}
原文地址:https://www.cnblogs.com/la-la-wanf/p/14564799.html