UVA12174Shuffle

来源:互联网 发布:如何导入数据到excel 编辑:程序博客网 时间:2024/06/05 04:07
//UVA12174Shuffle#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define M(a) memset(a, 0,sizeof(a))using namespace std;const int MAXN = 3e5 + 10;int a[MAXN];int vis[MAXN] = {0}, from[MAXN] = {0};int main() {int T, n, s;//freopen("UVA12174out.txt", "w", stdout);scanf("%d", &T);while(T--) {int ans = 0;scanf("%d%d", &s, &n);fill(a, a + MAXN, -1);for(int i = 0; i < n; i++) scanf("%d", &a[i + s]);int len = 0;//记录不重复数字的数量         M(vis); M(from);for(int i = 0; i < n + s; i++) {if(len == s) from[i] = 1;if(i < s && len == i) from[i] = 1;if(i > n && len == n + s - i) from[i] = 1;//printf("from[%d] = %d\n", i, from[i]);if(a[i] != -1 && --vis[a[i]] == 0) len--;if(a[i + s] != -1 && vis[a[i + s]]++ == 0) len++;//printf("i = %d, len = %d, a[%d] = %d, a[%d] = %d\n", i, len, i, a[i], i + s, a[i + s]);    }for(int i = 0; i < s; i++) {int valid = 1;for(int j = i; j < n + s; j += s) {if(!from[j]) {valid = 0;//printf("j = %d\n", j);break;}}if(valid) {    ans++;    //printf("i = %d, ans = %d\n", i, ans);}}if(ans == n + 1) ans = s;printf("%d\n", ans);}return 0;} /*44 103 4 4 1 3 2 1 2 3 46 66 5 4 3 2 13 53 3 1 1 17 35 7 3*//*25 54 2 1 3 2*//*21 21 1*/

原创粉丝点击