Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
终于ac了,暴搜给力~#include "stdio.h" #include "stdlib.h" #include "string.h" #define Len sizeof(repeater) struct repeater { char c; repeater *next[25]; int ch; }; int main() { int n; repeater *repm[26]; char rep[27]; scanf("%d", &n); while(n != 0) { memset(repm, NULL, 26); memset(rep, '0', 27); for (int i = 0; i < n; i ++) { repm[i] = (repeater *)malloc(Len); for (int j = 0; j < 25; j ++) { repm[i] ->next[j] = NULL; } repm[i] ->c = 65 + i; repm[i] ->ch = 1; } for (int i = 0; i < n; i ++) { if (i == 0) gets(rep); gets(rep); int t = strlen(rep); for (int j = 2; j < t; j ++) { int m = 0; while (repm[i] ->next[m] != NULL) m++; repm[i] ->next[m] = repm[rep[j] - 65]; } } int chmax; for (int j = 0; j < n; j++) { int t = j; for (int i = 0; i < n; i ++) { int m = 0; if (t >= n) t = t - n; while (repm[t] ->next[m] != NULL) { if (repm[t] ->next[m] ->ch == repm[t] ->ch) { repm[t] ->next[m] ->ch ++; } m ++; } t++; } t = j; for (int i = 0; i < n; i ++) { int m = 0; if (t >= n) t = t - n; while (repm[t] ->next[m] != NULL) { if (repm[t] ->next[m] ->ch == repm[t] ->ch) { repm[t] ->next[m] ->ch ++; } m ++; } t++; } int tmax = 1; for (int i = 0; i < n; i ++) { if (repm[i] ->ch > tmax) tmax = repm[i] ->ch; } if (j == 0) chmax = tmax; if (tmax < chmax ) chmax =tmax; for (int i = 0; i < n; i ++) repm[i] ->ch = 1; } if (chmax == 1) printf("1 channel needed.\n"); else printf("%d channels needed.\n", chmax); scanf("%d", &n); } return 0; } 两次循环是为了排除掉四个repeater两两相连的情况,亲测通过讨论里所有测试数据 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator