Codeforces Round #579 div3 E Boxers(思維)

題目鏈接

題意

給一行數有n個,對於每個數可以增大1,也可以減小1,也可以不變,要求修改後必須是正整數,不可爲0。將修改後的數去重,問最多有幾個?


#include <bits/stdc++.h>
using namespace std;

int n,a[150005],vis[150005],cnt;

int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",a+i);
    sort(a,a+n);
    for(int i=0;i<n;i++)
    {
        if(a[i]>1&&!vis[a[i]-1]){//如果可以左移,並且左邊沒有訪問過
            vis[a[i]-1] = 1;
            cnt++;
            continue;
        }
        if(vis[a[i]]){//如果當前已訪問過,就右移
            a[i]++;
        }
        if(!vis[a[i]]){//如果沒有訪問過,答案增加1
            vis[a[i]] = 1;
            cnt++;
        }
    }
    printf("%d",cnt);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章