ural 1007 Code Words

来源:互联网 发布:淘宝机械表 编辑:程序博客网 时间:2024/05/18 16:55


题意:

一个发送机可以通过一条隧道发送一些以二进制代码组成的单词。在其尽头 的接收机可以使用特殊技术恢复到最初的单词。 每个单词最初都由0和1组成。所有的单词最初长度都为N(4<=N<=1000)。当穿 过隧道之后单词可能发生以下几种情况之一:

1.任意(一个)0被1取代

2.任意(一个)符号被删除

3.一个符号(0或1)被插入到任何位置.

我们知道最初的单词都具有以下性质: 有1的位置号的总和是N+1的倍数或是0

分析:分几种情况暴力模拟。


Code:

#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxn=1010;char str[maxn],tmp[maxn];int N,len;bool Multiple(char s[]){    int sum=0;    for(int i=0;i<N;i++){        if(s[i]=='1')            sum+=i+1;    }    if(sum%(N+1)==0) return true;    return false;}int main(){    scanf("%d",&N);    while(scanf("%s",str)!=EOF){        len=strlen(str);        if(len==N){            if(Multiple(str)) printf("%s\n",str);            else {                for(int i=0;i<len;i++){                    if(str[i]=='1'){                        for(int j=0;j<len;j++){                            if(j==i){                                tmp[j]='0';                                continue;                            }                            tmp[j]=str[j];                        }                        tmp[len]='\0';                        if(Multiple(tmp)){                            printf("%s\n",tmp);                            break;                        }                    }                }            }        }else if(len<N){            for(int i=0;i<N;i++){                int idx=0,j;                for(j=0;j<i;j++){                    tmp[idx]=str[j];                    idx++;                }                tmp[idx++]='0';                for(;j<len;j++){                    tmp[idx]=str[j];                    idx++;                }                tmp[idx]='\0';                if(Multiple(tmp)){                    printf("%s\n",tmp);                    break;                }                idx=0;                for(j=0;j<i;j++){                    tmp[idx]=str[j];                    idx++;                }                tmp[idx++]='1';                for(;j<len;j++){                    tmp[idx]=str[j];                    idx++;                }                tmp[idx]='\0';                if(Multiple(tmp)){                    printf("%s\n",tmp);                    break;                }            }        }else if(len>N){            for(int i=0;i<len;i++){                int idx=0;                for(int j=0;j<len;j++){                    if(j==i) continue;                    tmp[idx++]=str[j];                }                tmp[idx]='\0';                if(Multiple(tmp)){                    printf("%s\n",tmp);                    break;                }            }        }    }    return 0;}


原创粉丝点击