Submission #1180088

#TimeUsernameProblemLanguageResultExecution timeMemory
1180088Szymon_PilipczukRope (JOI17_rope)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define st first #define nd second int main() { int n,m; cin>>n>>m; int c[n]; vector<int> am(m); vector<map<int,int>> e(m); vector<map<int,int>> e2(m); pair<int,int> mx; pair<int,int> mx2; for(int i =0 ;i<n;i++) { cin>>c[i]; c[i]--; am[c[i]]++; if(am[c[i]] > mx.st) { mx2 = mx; mx = {am[c[i]],c[i]}; } else if(am[c[i]] > mx2.st) { mx2 = {am[c[i]],c[i]}; } } for(int i = 0;i<n;i++) { if(i < n-1) { if(c[i+1] != c[i]) { if(i%2 == 0) { e[c[i]][c[i+1]]++; e[c[i+1]][c[i]]++; } else { e2[c[i]][c[i+1]]++; e2[c[i+1]][c[i]]++; } } } } for(int i = 0;i<m;i++) { if(i!= mx.nd && e[i].find(mx.nd) == e[i].end()) { e[i][mx.nd] = 0; } else if(i == mx.nd && e[i].find(mx2.nd) == e[i].end()) { e[i][mx2.nd] = 0; } if(i!= mx.nd && e2[i].find(mx.nd) == e2[i].end()) { e2[i][mx.nd] = 0; } else if(i == mx.nd && e2[i].find(mx2.nd) == e2[i].end()) { e2[i][mx2.nd] = 0; } } for(int i = 0;i<m;i++) { int ans = 1e9; for(auto [key,value] : e[i]) { int cu = n-am[i]-am[key]+value; if(n%2 == 1 && (c[n-1] != key && c[n-1] != i)) { cu++; } ans = min(ans,cu); //cout<<cu<<" "<<n<<" "<<am[i]<<" "<<am[key]<<" "<<key<<" "<<value<<"\n"; } //cout<<ans<<"\n"; int ans2 = 1e9; for(auto [key,value] : e2[i]) { int cu =n-am[i]-am[key]+value; if(n%2 == 0) { if(c[n-1] != key && c[n-1] != i) { cu++; } } if(c[0] != key &&c[0] != i) { cu++; } ans2 = min(ans2,cu); } //cout<<ans2<<"\n"; cout<<min(ans,ans2)<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...