Advertisement
Guest User

Untitled

a guest
May 26th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.35 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(){
  4.     unsigned char s[200002];
  5.     FILE *fi =fopen( "input.txt", "r" );
  6.     FILE *fo =fopen( "output.txt", "w" );
  7.     fgets( s,200002,fi);
  8.     int n= strlen(s);
  9.     int nd = 256;
  10.     if (n>256){
  11.         nd = n;
  12.     }
  13.     int I[n+1],J[n+1],P[n+1],B[n+1], D[nd+1];
  14.     for (int i=0; i<n;++i){
  15.         I[i]=i;
  16.         P[i]=s[i];
  17.     }
  18.     int k =0;
  19.     while (k<n){
  20.         for (int i = 0; i < nd; ++i) {
  21.             D[i]=0;
  22.         }
  23.         for (int i = 0; i < n; ++i) {
  24.             D[P[i]]++;
  25.         }
  26.         int t = 0;
  27.         for (int i = 0; i < nd; ++i) {
  28.             t += D[i];
  29.             D[i]= t - D[i];
  30.         }
  31.         for (int i = 0; i < n; ++i) {
  32.             J[D[P[(I[i]-k+n)%n]]]= (I[i]-k+n)%n;
  33.             D[P[(I[i]-k+n)%n]]+=1;
  34.         }
  35.         for (int i = 0; i < n; ++i) {
  36.             I[i]=J[i];
  37.         }
  38.         B[I[0]] = 0;
  39.         for (int i = 1; i < n; ++i){
  40.             if ((P[I[i]]!= P[I[i-1]]) || (P[(I[i]+k)%n]!= P[(I[i-1]+k)%n])){
  41.                 B[I[i]]= B[I[i-1]] + 1;
  42.             }
  43.             else{
  44.                 B[I[i]]=B[I[i-1]];
  45.             }
  46.         }
  47.         for (int i = 0; i < n; ++i) {
  48.             P[i] = B[i];
  49.         }
  50.         k = (k) ? (k*2) : (1);
  51.     }
  52.     fprintf (fo,"%i", P[0]);
  53.     fclose(fi);
  54.     fclose(fo);
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement