最近,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
这道题其实不太难,但是格式很麻烦,这个需要很细心,其中有一个新接触的知识点就是不懂得同学可以上网搜一下,我刚开始也不懂,后来知道怎么写了,这个知识点也会利用了
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int n,m,a[1000],k;
char cmp[1000],map[1000];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int x;
scanf("%d",&x);
for(int i=1;i<=8;i++)
{
scanf("%d%d",&n,&m);
a[n]=m;
}
scanf("%s",cmp+1);
cmp[0]='0';
int len=strlen(cmp+1);
puts(cmp+1);
cmp[len+1]='0';
cmp[len+2]='\0';
for(int i=1;i<x;i++)
{
map[0]='0';
for(int j=1;j<=len;j++)
{
k=(cmp[j-1]-'0')*100+(cmp[j]-'0')*10+(cmp[j+1]-'0');
map[j]='0'+a[k];
}
map[len+1]='\0';
puts(map+1);
map[len+1]='0';
map[len+2]='\0';
strcpy(cmp,map);
}
}
return 0;
}