Submission #1180468

#TimeUsernameProblemLanguageResultExecution timeMemory
1180468Szymon_PilipczukRope (JOI17_rope)C++20
55 / 100
2595 ms108776 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define st first #define nd second #define all(a) a.begin(),a.end() int main() { int n,m; cin>>n>>m; vector<int> c(n); vector<int> am(m); set<pair<int,int>> s; set<pair<int,int>> s2; vector<pair<int,int>> e; vector<pair<int,int>> e2; for(int i =0 ;i<n;i++) { cin>>c[i]; c[i]--; am[c[i]]++; } if(m == 1) { cout<<0<<"\n"; return 0; } vector<pair<int,int>> w; for(int i = 0;i<m;i++) { w.push_back({am[i],i}); } sort(all(w)); reverse(all(w)); for(int i = 0;i<n;i++) { if(i < n-1) { if(c[i+1] != c[i]) { if(i%2 == 0) { e.push_back({c[i],c[i+1]}); e.push_back({c[i+1],c[i]}); s.insert({c[i+1],c[i]}); s.insert({c[i],c[i+1]}); } else { e2.push_back({c[i],c[i+1]}); e2.push_back({c[i+1],c[i]}); s2.insert({c[i+1],c[i]}); s2.insert({c[i],c[i+1]}); } } } } vector<int> tans(m,1e9); for(int i = 0;i<m;i++) { for(int j = 0;j<m;j++) { if(s.find({i,w[j].nd}) == s.end() && i != w[j].nd) { tans[i] = min(tans[i],n-am[w[j].nd]-am[i]); } } } for(int i = 0;i<m;i++) { for(int j = 0;j<m;j++) { if(s2.find({i,w[j].nd}) == s2.end() && i != w[j].nd) { tans[i] = min(tans[i],n-am[w[j].nd]-am[i]); } } } sort(all(e)); sort(all(e2)); int i =0; while(i < e.size()) { int j = i; int ans = 1e9; while(e[i].st == e[j].st) { int q = j; int value = 0; while(e[j].nd == e[q].nd && e[j].st == e[q].st) { value++; q++; } ans = min(ans,n-am[e[j].st]-am[e[j].nd]+value); j = q; // cout<<n<<" "<<am[e[j].st]<<" "<<am[e[j].nd]<<" "<<value<<" "<<e[j].st<<"\n"; } tans[e[i].st] = min(tans[e[i].st],ans); i = j; } //cout<<tans[3]<<"\n"; i = 0; while(i < e2.size()) { int j = i; int ans = 1e9; while(e2[i].st == e2[j].st) { int q = j; int value = 0; while(e2[j].nd == e2[q].nd && e2[j].st == e2[q].st) { value++; q++; } ans = min(ans,n-am[e2[j].st]-am[e2[j].nd]+value); j = q; } tans[e2[i].st] = min(tans[e2[i].st],ans); i = j; } for(int i =0 ;i<m;i++) { cout<<tans[i]<<"\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...