CodeForces 546B - Soldier and Badges(模拟)

来源:互联网 发布:任务调度算法 编辑:程序博客网 时间:2024/05/23 07:25

题目链接:click here~~

题目大意】给你一个整数(1 ≤ n ≤ 3000)序列,求操作的最少步骤使得序列里没有相同的数,

解题思路】昨天想到一个可行的巧妙的方法:输入之后排序,然后依次判断一下,初始化last=-1,判断完之后
每次把最大的数更新为last,否则累加++last减去当期值的差, 

 #include <bits/stdc++.h> using namespace std; const int N=1e4; int num[N]; int main() {     int n;     scanf("%d",&n);     for(int i=0;i<n;i++) scanf("%d",&num[i]);     sort(num,num+n);     int last=-1,res=0;     for(int i=0;i<n;i++)     {         if(num[i]>last) last=num[i];         else res+=++last-num[i];     }     printf("%d\n",res);     return 0; }


0 0