Submission #975272

#TimeUsernameProblemLanguageResultExecution timeMemory
975272StefanSebezAncient Books (IOI17_books)C++14
12 / 100
1 ms348 KiB
#include "books.h" #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define ll long long long long minimum_walk(std::vector<int> p, int s){ int n=p.size();ll res=0; ll a[n+10]={0}; bool was[n+10]={0}; int ctdobri=0; for(int i=0;i<n;i++){ if(was[i]==true) continue; int j=p[i],ct=abs(p[i]-i); while(j!=i){ ct+=abs(p[j]-j); was[j]=true; j=p[j]; } /*j=p[i]; while(j!=i){ a[j]=ct; j=p[j]; }*/ a[i]=ct; } for(int i=0;i<n;i++){ was[i]=false; if(p[i]==i) ctdobri++; } int nesto=-10; for(int i=n-1;i>=0;i--){ if(p[i]!=i) {nesto=i;break;} } //for(int i=0;i<n;i++) printf("%lld ",a[i]); //printf("\n"); for(int i=0,maks=-1;i<n;i++){ //printf("%i: %lld %i\n",i,res,maks); if(was[i]==true) continue; ctdobri++; if(p[i]==i) ctdobri--; was[i]=true; int j=p[i]; maks=max(maks,i); while(j!=i){ maks=max(maks,j); ctdobri++; was[j]=true; j=p[j]; } res+=a[i]; if(maks==nesto) {res+=i;maks=n;} if(ctdobri==n) break; res++; if(maks>=i+1 || i==n-1) res--; //printf("%i: %lld %i\n",i,res,maks); } //res--; /*for(int i=0;i<n;i++){ int j=i; int trenutni=p[i]; while(1){ if(trenutni==j){ trenutni=p[j]; p[j]=j; if(j==i) break; } res++; if(trenutni>j) j++; else j--; } p[j]=trenutni; p[i]=i; //res+=2*(j-i); res++; //for(int k=0;k<n;k++) printf("%i ",p[k]); //printf("\n"); bool sortirano=true; for(int k=1;k<n;k++){ if(p[k-1]>p[k]) sortirano=false; } if(sortirano) break; res++; } res--;*/ return res; }
#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...