Submission #1163504

#TimeUsernameProblemLanguageResultExecution timeMemory
1163504i271828Ekoeko (COCI21_ekoeko)C++20
0 / 110
785 ms2288 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const int MAX=200005; int N=4; char A[MAX]="soolnlsn"; map<char,vector<int>> idxs; vector<int> L; vector<int> R; int pos[MAX]; bool lr[MAX]; int mv[MAX][2]; int D[MAX]; int main(){ cin>>N; cin>>A; for (int i=0;i<2*N;i++){ idxs[A[i]].push_back(i); } for (auto pr:idxs){ char c=pr.first; int l=idxs[c].size(); for (int i=0;i<l/2;i++){ L.push_back(idxs[c][i]); R.push_back(idxs[c][l-1-i]); } } for (int i=0;i<L.size();i++){ pos[L[i]]=i,pos[R[i]]=i; lr[L[i]]=1; lr[R[i]]=0; D[i]=(R[i]-L[i])-N; } for (int i=0;i<2*N;i++){ int x=pos[i]; int dist=D[x]; if (dist<0 && !lr[i]){ dist=-dist; for (int j=i;j<i+dist;j++){ lr[j] = lr[j+1]; pos[j] = pos[j+1]; mv[pos[j]][lr[j]]-=1; lr[j] ? D[pos[j]]++ : D[pos[j]]--; } lr[i+dist]=0; pos[i+dist]=x; mv[x][0]+=dist; D[x]+=dist; }else if (dist>0 && lr[i]){ for (int j=i;j<i+dist;j++){ lr[j] = lr[j+1]; pos[j] = pos[j+1]; mv[pos[j]][lr[j]]-=1; lr[j] ? D[pos[j]]++ : D[pos[j]]--; } lr[i+dist]=1; pos[i+dist]=x; mv[x][1]+=dist; D[x]-=dist; } } ll ans=0; for (int i=0;i<N;i++){ ans+=abs(mv[i][0]); ans+=abs(mv[i][1]); //cout<<L[i]<<' '<<R[i]<<'\n'; //cout<<mv[i][0]<<' '<<mv[i][1]<<'\n'; } cout<<ans/2; }
#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...