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

      

  • 相关阅读:
    Java SSM 框架相关基础面试题
    JPanel JScrollPanel
    Spring MVC 的 Converter 和 Formatter
    JDesktopPane JInternalFrames
    Spring MVC 中的 forward redirect Flash属性
    Java Swing 中使用 EventQueue
    Java 中转换为String类型的四种方法
    Eclipse 安装使用 M2Eclipse 插件
    正则表达式
    Spring MVC 数据绑定和表单标签库
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3043181.html
Copyright © 2011-2022 走看看