fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
  4. #define Bit(mask , i) ((mask >> i) & 1)
  5. #define fi first
  6. #define se second
  7. #define _LOG2(nl) 31 - __builtin_clz(nl)
  8. #define c_bit(nl) __builtin_popcount(nl)
  9. #define li pair<long long , int>
  10. #define db double
  11. #define onBit(mask , i) (mask | (1 << i))
  12. #define offBit(mask , i) (mask & (~(1 << i)))
  13.  
  14. const long long MOD = 1e9 + 7;
  15. const long long INF = 1e14;
  16. const int N = 3e5 + 7;
  17. int z[N] , kmp[N];
  18. int s[N];
  19. int n;
  20.  
  21. void inp(){
  22. cin >> n;
  23. for (int i = 1 ; i <= n ; ++i) cin >> s[i];
  24. }
  25.  
  26. bool check(int k){
  27. int i = 1;
  28. while (i <= n){
  29. if (z[i] < min(k , n - i + 1)) return 0;
  30. i += k;
  31. }
  32. return 1;
  33. }
  34.  
  35. void solve(){
  36. // int k = kmp[1] = 0;
  37. // for (int i = 2 ; i <= n ; ++i){
  38. // while (k > 0 && s[i] != s[k + 1]) k = kmp[k];
  39. // kmp[i] = s[i] == s[k + 1] ? ++k : 0;
  40. // }
  41. for (int i = 1 , l = 2 , r = 1 ; i <= n ; ++i){
  42. if (i <= r)
  43. z[i] = min(r - i + 1 , z[i - l + 1]);
  44. while (i + z[i] <= n && s[1 + z[i]] == s[i + z[i]])
  45. ++z[i];
  46. if (i + z[i] - 1 > r){
  47. l = i;
  48. r = i + z[i] - 1;
  49. }
  50. }
  51. for (int i = 1 ; i <= n ; ++i){
  52. if (check(i)){
  53. cout << i;
  54. return;
  55. }
  56. }
  57. }
  58.  
  59. int main(){
  60. // freopen("xhmax.inp" , "r" , stdin);
  61. // freopen("xhmax.out" , "w" , stdout);
  62. faster;
  63. inp();
  64. solve();
  65. return 0;
  66. }
  67.  
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
Standard output is empty