hdu_2526_浪漫手机


 hdu_2526_浪漫手机


Problem Description 最近,WisKey迷上了手机铃声,但是他对音律不是很懂,所以他想着能否用计算机来随机生成铃声。当WisKey写好程序后,发现生成出来的根本不是铃声,而是噪声!
之后WisKey查阅了一些乐谱发现,其实很多铃声是以某种规律变化的,这里为了简化这个难题,他以连续3个音符来判断下个音符。
如有模式

在给定第一行乐谱的情况下,按模式将产生如下乐谱图形:

我们用0表示白色格子,用1表示黑色格子。
对于没有连续3个格子的边缘(即没有左边格子或右边格子),我们直接用白色格子代替缺少的那一个格子。

Input 第一行有一个整数T,代表有T组数据。
每组数据有一个整数M,表示要输出M行乐谱。接着有8行模式串,左边是音符模式,右边是下一个音符。最后一行是第一行乐谱。

Output 输出M行,表示M行乐谱。
Sample Input
  1
16
111 1
110 1
101 1
100 1
011 1
010 0
001 1
000 0
0000000000000001000000000000000

Sample Output
  0000000000000001000000000000000
0000000000000010100000000000000
0000000000000101010000000000000
0000000000001010101000000000000
0000000000010101010100000000000
0000000000101010101010000000000
0000000001010101010101000000000
0000000010101010101010100000000
0000000101010101010101010000000
0000001010101010101010101000000
0000010101010101010101010100000
0000101010101010101010101010000
0001010101010101010101010101000
0010101010101010101010101010100
0101010101010101010101010101010
1010101010101010101010101010101这题不难,就是上一行的三个字符决定下一行三个中间的字符。关键在于把三个字符换成数字0~7。剩下的要敲出来只是时间问题。所以定义一个hash函数转换。贴代码:
 
#include
#include
#include
using namespace std;
char ch0[1005],ch1[1005];
int hash (char ch[4])                    //hash函数,用于转换。例 字符串  “101”  ->  数字 5 
{return ((ch[0]-'0')*4+(ch[1]-'0')*2+(ch[2]-'0'));
}
int main()
{int t,m;char Type[4],type,mode[8];//freopen("a.txt","w",stdin);scanf ("%d",&t);//printf ("%d",t);while(t--){scanf ("%d",&m);//printf ("%d\n",m);getchar();for (int i=0;i<8;i++){scanf ("%s %c",Type,&type);//printf ("%d ",hash(Type));mode[hash(Type)]=type;getchar();//printf("%d\n",mode[hash(Type)]);printf ("1 ");}//scanf ("%s",ch0);printf ("%s\n",ch0);int len=strlen(ch0);for (int i=0;i


老实说我敲了好久的,要细心点。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部