这个题目一开始拿到之后的思路是很明显的,就是统计连续片段的个数,但是这种思路会忽视连选数字的并行情况例如(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;
}

京公网安备 11010502036488号