您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: