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;
    }
    

      

  • 相关阅读:
    pandas之数据读取
    pandas之简单数据统计描述
    人脸识别
    图像识别之物体识别
    图像识别之特征点检测
    图像识别之角点检测
    图像识别之边缘识别
    爬取企查查网站中安徽省内的企业数据信息
    民政局中行政区域数据爬取
    有道翻译和百度翻译在线爬取
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3043181.html
Copyright © 2011-2022 走看看