• 2012 5 22 词编码


    #include<iostream>
    #include<string.h>
    #include<algorithm>
    
    
    
    using namespace std;
    
    
    int n;
    char a[1100];
    
    int main( )
    {
        cin>>n;
        while(~scanf("%s",&a))
        {
           int chang=strlen(a);
           int sum=0;
           int sum1=0;
           for(int i=0;i<chang;i++)
           {
               if(a[i]=='1')
               {
                  sum=sum+(i+1);
                  sum1++;
               }
           }
           if(sum%(n+1)==0&&chang==n)
           {
               cout<<a<<endl;
           }
           else
           { 
               int ok=0;
               if(chang==n)
               {
                  for(int i=0;i<chang;i++)
                  {
                     if((sum-(i+1))%(n+1)==0&&a[i]=='1')
                     {
                       a[i]='0';
                       cout<<a<<endl;
                       ok=1;
                       break;
                    }
                   }
               }  
               if((sum+sum1)%(n+1)==0&&ok==0&&chang==n-1)
               {
                       cout<<0;
                       for(int i=0;i<chang;i++)
                       {
                          cout<<a[i];
                       }
                       cout<<endl;
                       ok=1;
               }
               if((sum+sum1+1)%(n+1)==0&&ok==0&&chang==n-1)
               {
                      cout<<1;
                      for(int i=0;i<chang;i++)
                      {
                          cout<<a[i];
                      }
                      cout<<endl;
                      ok=1;
               }                              
               if(ok==0&&chang==n-1)
               {
                   int sum2=0;
                   for(int i=0;i<chang;i++)
                   {
                       if(a[i]=='1')
                       {
                          sum2++;
                       }
                       if((sum+(sum1-sum2))%(n+1)==0)
                       {
                           for(int j=0;j<=i;j++)
                           {
                               cout<<a[j];
                           }
                           cout<<'0';
                           for(int j=i+1;j<chang;j++)
                           {
                               cout<<a[j];
                           }      
                           cout<<endl;
                           ok=1;
                           break;
                       }
                       if((sum+i+2+(sum1-sum2))%(n+1)==0)
                       {
                           for(int j=0;j<=i;j++)
                           {
                               cout<<a[j];
                           }
                           cout<<'1';
                           for(int j=i+1;j<chang;j++)
                           {
                               cout<<a[j];
                           }      
                           cout<<endl;
                           ok=1;
                           break;
                       }    
                   }
           
               }    
               if(ok==0&&chang==n+1)
               {
                       int sum2=0;
                       for(int i=0;i<chang;i++)
                       {
                           if(a[i]=='1')
                           {
                               sum2++;
                           }    
                           if((sum-(i+1)-(sum1-sum2))%(n+1)==0&&a[i]=='1')
                           {
                               for(int j=0;j<i;j++)
                               {
                                    cout<<a[j];
                               }
                               for(int j=i+1;j<chang;j++)
                               {
                                    cout<<a[j];
                               }
                               cout<<endl;
                               ok=1;
                               break;
                           }         
                           if((sum-(sum1-sum2))%(n+1)==0&&a[i]=='0')
                           {
                               for(int j=0;j<i;j++)
                               {
                                    cout<<a[j];
                               }
                               for(int j=i+1;j<chang;j++)
                               {
                                    cout<<a[j];
                               }
                               cout<<endl;
                               ok=1;
                               break;    
                           } 
                       }
               }    
               if(ok==0)
               cout<<-1<<endl;
           } 
       }   
       return 0;
    }     
                        
                               

    1. 词编码

     

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

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

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

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

      (4)不改变

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

      【input】

      N和转换后的单词,每个单词占一行。单词数不大于2001.不会有其它任何东西,除了一些空格与空行,

      【Output】

      你的程序应该打印输出原始序列的词,注意换行。

        若有多解,操作4优先,不行则按操作1,2,3优先。同一操作,按操作位置最先的优先。同一操作,按操作位置最先的优先(从左到右数起l,2,3,…N),还有操作2时,被删数列,先在被删数列添0,不行再添l。

      如果没答案输出-1

      【Sample input】

      4

      0000

      011

      101l

      1l011

      【Sample Output】

      0000

      0110

      1001

      111l

    这是个很简单的模拟,但竟然W了一次。。。。真是令人汗颜。

  • 相关阅读:
    SAXParseException;前言中不允许有内容的错误
    FATAL Alert:BAD_CERTIFICATE
    DB2的递归
    在Unity中针对屏幕自适应,我们该如何做呢?
    原码与反码的区别?
    在Unity 3D中加入Image图片
    你的外接键盘的小键盘在Num Lock键亮着的,但是数字按了不能用,解决办法在这里
    唯美英文(一)
    如何使用gcc编译器
    C++中const的用法
  • 原文地址:https://www.cnblogs.com/spwkx/p/2518590.html
Copyright © 2020-2023  润新知