MiYu原创, 转帖请注明 : 转载自 ______________白白の屋    

 

题目地址:

http://acm.hdu.edu.cn/showproblem.php?pid=2526

题目描述:

浪漫手机

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 362    Accepted Submission(s): 150


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
 

 

题目分析 :

纯水 模拟题..........      就是 由 上面 3 个 格子的 颜色 推出下面 中间那块的 颜色.  推出来直接输出就可以了 .

  题目开始已经给出了第一行的 颜色 , 下面的可以直接 暴力推出来  用hash很快就能判断.

代码如下 :

 /*

Coded By  : MiYu

Link      : http://www.cnblogs.com/MiYu  || http://www.cppblog.com/MiYu

Author By : MiYu

Test      : 1

Program   : 2526

*/

//#pragma warning( disable:4789 )

#include <iostream>

#include <cstdio>

#include <cstring>

using namespace std;

char c[2][50];

int T,t,M;

int main(){

    char a[3],b[9];

for(int i=0;i<2;i++) c[i][0]='0';

scanf("%d",&T);

while(T--){

scanf("%d",&M);

for(int i=1;i<=8;i++){

scanf("%s",a);

int num=(a[0]-'0')*4+(a[1]-'0')*2+a[2]-'0';

scanf("%d",&t);

b[num] = '0' + t;

}

scanf("%s",&c[0][1]);

int len=strlen(&c[0][1]);

for(int i=0;i<2;i++) c[i][len+1]='0';

for(int j=0;j<M;j++){

for(int i=0;i<len;i++){

int num=(c[j%2][i]-'0')*4+(c[j%2][i+1]-'0')*2+c[j%2][i+2]-'0';

c[(j+1)%2][i+1]=b[num];

                printf("%c",c[j%2][i+1]);

}

            printf("\n");

}

}

return 0;

}


 

 

 posted on 2010-09-26 16:41  MiYu  阅读(481)  评论(0编辑  收藏  举报