Guest User

E

a guest
May 19th, 2013
1,108
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <cstdio>
  2. #include <memory.h>
  3. #include <cstring>
  4.  
  5. inline int max(int a, int b) { if (a >= b) return a; return b; }
  6.  
  7. const int N = 5005;
  8. char s[N];
  9. int grundy[N], mex[N], n, totalXor;
  10.  
  11. int main(){
  12.     gets(s);
  13.     for(int i = 1; i < N; i++) {
  14.         memset(mex, 0, sizeof mex);
  15.         for(int j = 0; j < i; j++) {
  16.             int left = max(0, j - 1);
  17.             int right = max(0, i - j - 2);
  18.             int tXor = grundy[left] ^ grundy[right];
  19.             if (tXor < N) mex[tXor]++;
  20.         }
  21.         for(int j = 0; ; j++) {
  22.             if (!mex[j]) {
  23.                 grundy[i] = j;
  24.                 break;
  25.             }
  26.         }
  27.     }
  28.     n = strlen(s);
  29.     for(int i = 1; i < n - 1; i++) {
  30.         if (s[i-1] == s[i + 1]) {
  31.             int j = i;
  32.             while (j + 2 < n && s[j] == s[j + 2]) j++;
  33.             totalXor ^= grundy[j - i + 1];
  34.             i = j + 1;
  35.         }
  36.     }
  37.     if (totalXor != 0) {
  38.         puts("First");
  39.         for(int i = 1; i < n - 1; i++) {
  40.             if (s[i-1] == s[i+1]) {
  41.                 int j = i;
  42.                 while (j + 2 < n && s[j] == s[j + 2]) j++;
  43.                 int len = j - i + 1;
  44.                 int nowXor = totalXor ^ grundy[len];
  45.                 for(int k = 0; k < len; k++) {
  46.                     int left = max(0, k - 1);
  47.                     int right = max(0, len - k - 2);
  48.                     int resXor = nowXor ^ grundy[left] ^ grundy[right];
  49.                     if (resXor == 0) {
  50.                         printf("%d\n", i + k + 1);
  51.                         return 0;
  52.                     }
  53.                 }
  54.                 i = j + 1;
  55.             }
  56.         }
  57.     }
  58.     puts("Second");
  59. }
RAW Paste Data