ural 1007. Code Words
2013-04-25 19:15
267 查看
1007. Code Words
Time Limit: 2.0 secondMemory 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:
Any (but only one) symbol 0 is replaced by 1.
Any (but only one) symbol is removed.
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
input | output |
---|---|
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; }
相关文章推荐
- URAL 1007 Code Words
- URAL 1007 - Code Words
- URAL1007 code words
- ural1007 Code Words (字符串处理)
- ural 1007 Code Words
- ural 1007
- URAL--1007 codewords
- Timus 1007. Code words
- 北大ACM试题1007之七大内部排序
- 【状压】 URAL 1500 Pass Licenses
- 1090. In the Army Now (Ural 1090 归并排序||树状数组)
- URAL 2034 Caravans (最短路 + 二分)
- URAL1965:Pear Trees(DP)
- URAL 2041 Nanomatryoshkas(贪心)
- 10 URAL 1014 Product of Digits
- URAL1119——DP——Metro
- 递推DP URAL 1167 Bicolored Horses
- DP+高精度 URAL 1036 Lucky Tickets
- Ural 1225 Flags
- Ural 1017 Staircases