日常训练2025-1-22
F Tokitsukaze and Eliminate (hard)
https://ac.nowcoder.com/acm/contest/67742/F
思路(小巧思)
标准的Trick题,构造一个样例来模拟一下会发现,在删的那个数的位置之后的每一种数都至少出现了一次,他是最后出现的。模拟这个过程就行。
代码
#include <bits/stdc++.h>typedef std::pair<long long, long long> pll;
typedef std::pair<int, int> pii;
#define INF 0x3f3f3f3f
#define MOD 998244353
using i64 = long long;
const int N = 1e5+5;using namespace std;void solve(){int n;cin>>n;vector<int>a(n+1);map<int,int>mp1,mp2;for(int i=1;i<=n;i++){cin>>a[i];mp1[a[i]]++;}int pos=mp1.size();int ans=0;for(int i=n;i>=1;i--){if(mp1.size()==1){ans+=i;break;}mp2[a[i]]++;mp1[a[i]]--;if(mp1[a[i]]==0) mp1.erase(a[i]);if(mp2.size()==pos){ans++;mp2.clear();pos=mp1.size();}}cout<<ans<<endl;
}signed main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2);int t = 1, i;std::cin >> t;for (i = 0; i < t; i++){solve();}return 0;
}