codeforces C. Sequence Transformation
场上没有打出来啊,思路也一波三折,还是欠练了qwq
题目大意:给你一个长度为n的序列,每次可以选择连续的一段删去,问删到只剩相同数字x最少需要多少次操作
首先想的是统计出现次数,然后看头尾,特判一波,写的时候发现要给记录出现次数排序,然后思路就乱了
然后队友提醒应该考虑区间,所以想到去重(还有刚开始我用数组存的,每次还要memset想着铁超时啊,就很迷茫了)
最后就是先将数组a中数字用unique去重,然后在统计出现次数,对头尾进行特殊处理(即-1),最后找出最少的出现次数即可。
代码如下:
#include<bits/stdc++.h> using namespace std; const int maxn = 20005; int b[maxn]; int main() { int t,n,ans; cin >> t; while(t--) { ans = 1e9; cin >> n; vector<int>a(n); for(auto &it: a) cin >> it; vector<int> res(n + 1, 1); n = unique(a.begin(), a.end()) - a.begin(); a.resize(n); for(int i = 0; i < n; i++) { res[a[i]]++; } res[a[n - 1]]--; res[a[0]]--; for(int i = 0; i < n; i++) { ans = min(ans, res[a[i]]); } cout << ans << endl; } }

浙公网安备 33010602011771号