HDOJ 2526 浪漫手机 HDU2526

/* 题目的意思很简单,上一行的3个音符决定下一行的1个音符,即,每一次都可以从一行音符得到下一行音符, mod字符数组来表示音符的变化,因为只有8种情况,000~111 (即十进制的0~7) 那么mod[0~7]便可以保存推出了8中情况 */ #include <iostream> #include <string> using namespace std; char mod[10]; // 音符变化数组 int main() { int T; cin>>T; while(T--) { int M,i,j,k; string s,temp; char next; cin>>M; for(i=0;i<8;i++) // 8种推出模式 { int sum=0; cin>>temp; cin>>next; for(j=0;j<3;j++) //转成2进制节约空间 { sum=sum*2+(temp[j]-'0'); } mod[sum]=next; // 每一种情况代表一个音符 } cin>>s; cout<<s<<endl; // 第一行 string nexts(s.length(),'0'); // nexts代表下一行要输出的音符 for(j=1;j<M;j++) // 剩下的只要输出M-1行 { for(i=0;i<s.length();i++) { if(i==0) // 左边界 { nexts[i]=mod[(s[i]-'0')*2+(s[i+1]-'0')]; continue; } if(i==s.length()-1) //右边界 { nexts[i]=mod[(s[i-1]-'0')*4+(s[i]-'0')*2]; continue; } //中间情况 nexts[i]=mod[(s[i-1]-'0')*4+(s[i]-'0')*2+(s[i+1]-'0')]; } s=nexts; cout<<s<<endl; for(k=0;k<nexts.length();k++) nexts[k]='0'; } } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值