首页 > 代码库 > Uva12174

Uva12174

 1 #include <bits/stdc++.h> 2  3 using namespace std; 4  5 const int maxn = 5000000; 6  7 int t;  8  9 int s,n;10 11 int a[maxn+10];12 13 int res[maxn+10];14 15 int flag[maxn+10];16 17 void init(){18     memset(a, 0, sizeof(a));19     memset(res, 0, sizeof(res));20     memset(flag, 0, sizeof(flag));21 }22 23 24 25 int main(){26 //freopen("a.txt", "w", stdout);27     scanf("%d",&t);28     while(t--){29         init();30         scanf("%d%d",&s, &n);31         for(int i = 1; i <= n; ++i){32             scanf("%d",&a[i]);33         }34         for(int i = 1; i <= s; ++i){35             a[i+n] = i + maxn/10;36         }37 38         int temp = s;39         for(int i = 1; i <= n+s-1; ++i){40                 if(i <= s){41                     42                     temp -= 1;43                     flag[a[i]] += 1;44                     45                     if(flag[a[i]] == 1){46                         temp += 1;47                     } else if(flag[a[i]] == 2){48                         temp -= 1;49                     }50                     if(temp == s){51                 52                         res[i] = 1;53                     }54                 } else {55                     56                     flag[a[i-s]] -= 1;57                     58                     if(flag[a[i-s]] == 0){59                         temp -= 1;60                     } else if(flag[a[i-s]] == 1){61                         temp += 1;62                     }63                     64                     flag[a[i]] += 1;65                     if(flag[a[i]] == 1){66                         temp += 1;67                     } else if(flag[a[i]] == 2){68                         temp -= 1;69                     }70                     71                     if(temp == s){72                         73                         res[i%s] = res[i%s]&1;74                     } else {75                         res[i%s] = 0;76                     }77                 } 78         }79 80         int ans = 0;81         if(n <= s && res[n] == 1){82             ans = s;83         } else {84         for(int i = 1; i <= s; ++i){85                 if(res[i] == 1){86                     ++ans;87                 }88         }89     }90         printf("%d\n",ans);91 92     }93 }

 

Uva12174