URAL 1007 Code Words
2012-04-30 21:08
337 查看
URAL_1007
按题目的要求依次检查各个可能出错的位置即可。
按题目的要求依次检查各个可能出错的位置即可。
#include<stdio.h> #include<string.h> #define MAXD 1010 int N, M, A[MAXD], S; char b[MAXD]; void checkreplace() { int i, j, k; for(i = 0; i < M; i ++) if(b[i] == '1' && (S - i - 1) % (N + 1) == 0) { b[i] = '0'; printf("%s\n", b); return ; } } void checkremove() { int i, j, k; for(i = 0; i < M; i ++) { if((S + A[i]) % (N + 1) == 0) { for(j = 0; j < i; j ++) printf("%c", b[j]); printf("0"); for(j = i; j < M; j ++) printf("%c", b[j]); printf("\n"); return ; } if((S + A[i] + i + 1) % (N + 1) == 0) { for(j = 0; j < i; j ++) printf("%c", b[j]); printf("1"); for(j = i; j < M; j ++) printf("%c", b[j]); printf("\n"); return ; } } printf("%s", b); if(S % (N + 1) == 0) printf("0\n"); else printf("1\n"); } void checkinsert() { int i, j, k; for(i = 0; i < M; i ++) if((b[i] == '1' && (S - i - A[i]) % (N + 1) == 0) || (b[i] == '0' && (S - A[i]) % (N + 1) == 0)) { b[i] = '\0'; printf("%s", b); printf("%s\n", b + i + 1); return ; } } void solve() { int i, j, k; M = strlen(b); A[M] = S = 0; for(i = M - 1; i >= 0; i --) { A[i] = A[i + 1] + b[i] - '0'; if(b[i] == '1') S += i + 1; } if(N == M) { if(S % (N + 1) == 0) printf("%s\n", b); else checkreplace(); } else if(M < N) checkremove(); else checkinsert(); } int main() { scanf("%d", &N); while(scanf("%s", b) == 1) { solve(); } return 0; }
相关文章推荐
- ural 1007. Code Words
- URAL 1007 - Code Words
- URAL1007 code words
- ural1007 Code Words (字符串处理)
- ural 1007 Code Words
- ural 1007
- URAL--1007 codewords
- Timus 1007. Code words
- 北大ACM试题1007之七大内部排序
- 【状压】 URAL 1500 Pass Licenses
- 1090. In the Army Now (Ural 1090 归并排序||树状数组)
- URAL 2034 Caravans (最短路 + 二分)
- URAL1965:Pear Trees(DP)
- URAL 2041 Nanomatryoshkas(贪心)
- 10 URAL 1014 Product of Digits
- URAL1119——DP——Metro
- 递推DP URAL 1167 Bicolored Horses
- DP+高精度 URAL 1036 Lucky Tickets
- Ural 1225 Flags
- Ural 1017 Staircases