zoukankan      html  css  js  c++  java
  • ural 1007. Code Words

    1007. Code Words

    Time Limit: 2.0 second
    Memory Limit: 64 MB
    A transmitter sends over a noisy line some binary code words. The receiver on the other end uses special technique to recover the original words.
    Every word originally consists of symbols 0 and 1. All words have the same length N (4 ≤ N ≤ 1000). After traveling through the noisy line one (but no more) of the following modifications to a word may occur:
    1. Any (but only one) symbol 0 is replaced by 1.
    2. Any (but only one) symbol is removed.
    3. A symbol (0 or 1) is inserted at any position.
    It is known that the original words all have the following property: the sum of positions where symbols 1 are located is a multiple of (N+1) or equal to zero.

    Input

    Input contains number N followed by received words. The words are delimited with line breaks. There will be no more than 2001 words. There is nothing else in the input data, except maybe for some extra spaces or line breaks.

    Output

    Your program should print to output the original sequence of words as they were transmitted. The words should be delimited by line breaks.

    Sample

    inputoutput
    4    
    0000 
    011  
    1011 
    11011
    
    0000
    0110
    1001
    1111
    
    #include <iostream>
    #include <cstdio>
    #include <vector>
    #include <algorithm>
    #include <string>
    using namespace std;
    
    int n;
    bool isSourceStr(string src){
        int cnt = 0;
        for(int i = 0; i < src.length(); i ++ )
            if(src[i] == '1') cnt +=(i+1);
        if(cnt%(n+1)) return false;
        else return true;
    }
    
    int main(){
        cin >> n;
        string receive;
        while(cin>>receive) {
            if(receive.length() == n){
                int cnt = 0;
                for(int j = 0; j < receive.length(); j ++ ){
                    if(receive[j] == '1') cnt +=(j+1);
                }
                if(cnt%(n+1) != 0){
                    int a = cnt%(n+1);
                    while(receive[a-1]!='1'){
                        a +=(n+1);
                    }
                    receive[a-1]='0';
                }
                cout<<receive<<endl;
            }
            else if(receive.length() < n){
                for(int i = 0; i <= receive.length(); i ++ ){
                    string tmp1=receive,tmp2=receive;
                    tmp1.insert(i,1,'1');
                    if(isSourceStr(tmp1)){cout<<tmp1<<endl;break;}
                    tmp2.insert(i,1,'0');
                    if(isSourceStr(tmp2)){cout<<tmp2<<endl;break;}
                }
            }
            else{
                for(int i = 0; i <= receive.length(); i ++ ){
                    string tmp1=receive;
                    tmp1.erase(i,1);
                    if(isSourceStr(tmp1)){cout<<tmp1<<endl;break;}
                }
            }
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    【WF2017】Mission Improbable
    【Codeforces 837D】Round Subset
    【Codeforces 788C】The Great Mixing
    【JSOI2008】最大数
    2.1图像的数字化
    MATLAB生成随机数
    四六级准考证号忘记了如何快速查询四六级成绩?
    加密与水印结合
    如何在 PyPI安装python的软件包?
    matlab中如何定义函数
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3043181.html
Copyright © 2011-2022 走看看