uva 213 Message Decoding (对输入的处理)
来源:互联网 发布:最新淘宝app官方下载 编辑:程序博客网 时间:2024/06/07 11:37
给一个编码头和一串编码(编码可以换行),编码头根据以下规则对应编码{ 考虑下面的01串: 0,00,01,10,000,001,010,101,110,0000,0001.....首先是长度为1的串,然后是长度为二的串,以此类推。并且每一段长度的数字从0到(1<<n)-1(第n段)排列,即题目中所说不包括全为1的串。 编码文本由多个小节组成,每小节前三位数字表示该小节中每个编码的长度(例010表示编码长度为2),然后是各个字符的编码,每小节以全1结束。例第一小节:00101。
你的任务是编写一个解码程序,将输入的编码转化为对应编码头中字符的句子输出。
这个题目由于输入的时候可以换行输入,这样就不能直接输出完所有的01串然后再处理,这道题很巧妙的用了边输入边处理的方法,每次根据需求读入某一段01串。
#include<bits/stdc++.h>using namespace std;char s[1000][1000];void init(string str)//先预处理一下,将给定的字符串用编码的形式储存起来{ int i=0,n=1; while(i<str.length()) { for(int k=0;k<((1<<n)-1);k++) { s[n][k]=str[i++]; if(i==str.length()) break; } n++; }}int read(int n)//这个函数很重要,很巧妙的处理了换行输入的问题{ int sum=0; char ch; for(int i=1;i<=n;i++) { scanf("%c",&ch); if(ch=='\n') { i--; continue; } sum=sum*2+ch-'0'; } return sum;}int main(){ string str; char ss[11000]; while(getline(cin,str)) { init(str); int i=0; while(1) { int len=read(3);//每次输入一小段,边输入边判断是否结束输入 if(len==0) break; while(1) { int ans=read(len);//同上 if(ans==((1<<len)-1)) break; ss[i++]=s[len][ans]; } } getchar(); ss[i]='\0'; puts(ss); } return 0;}
阅读全文
0 0
- uva 213 Message Decoding (对输入的处理)
- uva 213 Message Decoding 字符串处理
- uva -213Message Decoding
- UVa 213 - Message Decoding
- UVA【213】 Message Decoding
- uva 213 Message Decoding
- UVA-213-Message Decoding
- UVa-213Message Decoding
- UVA - 213 Message Decoding
- Uva - 213 - Message Decoding
- UVA - 213 Message Decoding
- UVA 213 Message Decoding
- UVa 213 Message Decoding
- uva 213 Message Decoding
- UVa 213 Message Decoding
- UVA 213 Message Decoding
- Message Decoding UVa 213
- Uva 213 Message Decoding
- 青蛙的约会 POJ
- hdu 1754 I Hate It 线段树
- ACM dp Cheapest Palindrome
- 自定义Application类简单介绍
- LVS--Nginx、HAproxy比较(3)
- uva 213 Message Decoding (对输入的处理)
- LVS工作模式介绍
- 取消svn的关联
- iOS 【RSA 非对称加密】
- 高性能的贪吃蛇C语言实现
- LVS+keepalived(主从模式)安装
- 浏览器兼容问题
- class和struct有什么区别?
- Sliding Window POJ