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

      

  • 相关阅读:
    winget
    splunk单节点容器部署
    jumpserver容器化部署
    思科acl
    Java springboot-plus
    接口 Postman 上传图片测试
    EF 数据迁移 新
    电商 抓取淘宝分类 包含图片和名称
    思维导图 淘宝上新流程
    功能模块 上传视频 生成视频预览图
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3043181.html
Copyright © 2011-2022 走看看