Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- int main(){
- unsigned char s[200002];
- FILE *fi =fopen( "input.txt", "r" );
- FILE *fo =fopen( "output.txt", "w" );
- fgets( s,200002,fi);
- int n= strlen(s);
- int nd = 256;
- if (n>256){
- nd = n;
- }
- int I[n+1],J[n+1],P[n+1],B[n+1], D[nd+1];
- for (int i=0; i<n;++i){
- I[i]=i;
- P[i]=s[i];
- }
- int k =0;
- while (k<n){
- for (int i = 0; i < nd; ++i) {
- D[i]=0;
- }
- for (int i = 0; i < n; ++i) {
- D[P[i]]++;
- }
- int t = 0;
- for (int i = 0; i < nd; ++i) {
- t += D[i];
- D[i]= t - D[i];
- }
- for (int i = 0; i < n; ++i) {
- J[D[P[(I[i]-k+n)%n]]]= (I[i]-k+n)%n;
- D[P[(I[i]-k+n)%n]]+=1;
- }
- for (int i = 0; i < n; ++i) {
- I[i]=J[i];
- }
- B[I[0]] = 0;
- for (int i = 1; i < n; ++i){
- if ((P[I[i]]!= P[I[i-1]]) || (P[(I[i]+k)%n]!= P[(I[i-1]+k)%n])){
- B[I[i]]= B[I[i-1]] + 1;
- }
- else{
- B[I[i]]=B[I[i-1]];
- }
- }
- for (int i = 0; i < n; ++i) {
- P[i] = B[i];
- }
- k = (k) ? (k*2) : (1);
- }
- fprintf (fo,"%i", P[0]);
- fclose(fi);
- fclose(fo);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement