这个题目一开始拿到之后的思路是很明显的,就是统计连续片段的个数,但是这种思路会忽视连选数字的并行情况例如(111222这种得到的cost会是6,所以使用multiset来进行删除工作,逻辑不变,更加符合直觉。

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

int main()
{
    int n;
    cin >> n;
    multiset<int> nums;
    for(int i = 0; i < n; i++)
    {
        int a; 
        cin >> a;
        nums.insert(a);
    }
    int cost = 0;
    while(!nums.empty())
    {
        cost++;
        auto start = nums.begin();
        int cn = *start;
        nums.erase(start);

        while(true)
        {
            int next = cn + 1;
            auto it = nums.find(next);
            if(it!=nums.end())
            {
                cn = *it;
                nums.erase(it);
                
            }
            else break;
        }
   
    }
    
    cout << cost << endl;
}