现在的位置: 首页 > 综合 > 正文

NBUT1478:泄密的图片

2013年10月13日 ⁄ 综合 ⁄ 共 1453字 ⁄ 字号 评论关闭
  • http://ac.nbutoj.com/Problem/view.xhtml?id=1478
  • 问题描述
  • 斯诺登的泄密真是让美国捉襟见肘。今天他偷偷给艾丽叶发了一些数据,说是美国秘密拍摄的一些图片。可是都是四个矩阵为一组的写满数字的数据,要怎么看呢?好在人家发话了:为了不被发现是秘密图片,他把这些图片颜色拆分到三张图中(图B、图C和图D)。第一幅图(图A)是计算最终图片的公式,不过他不能直接透露公式是什么,需要艾丽叶酱自行探索。已知的公式是:
    1.第一幅图某个像素点是1的话,那最终图同样位置的像素点就是图B的像素点
    2.第一幅图某个像素点是3的话,那最终图同样位置的像素点就是图B对应位置的像素点加上图C对应位置的像素点
    3.第一幅图某个像素点是4的话,那最终图同样位置的像素点就是图D的像素点
    4.按照上述的推论,从1计算到7即可。若像素点不是1至7之间,那么最终图对应的位置的像素点就是0.
    5.如果某个点的和大于等于9,那这个位置的像素点就是9.
    艾丽叶没几分钟就发现了所有的秘密,你呢?

  • 输入
  • 第一行是总组数。
    第二三行表明了矩阵的列数与行数(不超过200)。
    接下来是公式图的像素点(值范围为1到7)。
    最后是三张图片的像素点(值范围为1到9)。
  • 输出
  • 对于每组数据,输出其最终图片,即计算结果。
  • 样例输入
  • 1
    3
    3
    123
    456
    722
    111
    111
    111
    222
    222
    222
    333
    333
    333
    
  • 样例输出
  • 123
    345
    622
    
    题意:根据a,b,c,四个矩阵退出镜像矩阵
    思路:根据题意与样例的输入,可以退出一下的对应关系
    1:b
    2:c
    3:b+c
    4:d
    5:b+d
    6:c+d
    7:b+c+d
    要注意如果初始矩阵位置大于7,则对应位置为0
    和超过9,则对应位置为9
    理解题意后就是水题
    本来是水题,但是千万要注意的是,这里先输入的是列数,昨天比赛就坑在这里了,蛋疼
     
    #include <stdio.h>
    #include <string.h>
    
    char a[222][222],b[222][222],c[222][222],d[222][222];
    
    int fun(int i,int j)
    {
        int k;
        if(a[i][j] == '1')
            k = b[i][j] - 48;
        else if(a[i][j] == '2')
            k = c[i][j] - 48;
        else if(a[i][j] == '4')
            k = d[i][j] - 48;
        else if(a[i][j] == '3')
            k = c[i][j] + b[i][j] - 48*2;
        else if(a[i][j] == '5')
            k = b[i][j] + d[i][j] - 48*2;
        else if(a[i][j] == '6')
            k = c[i][j] + d[i][j] - 48*2;
        else if(a[i][j] == '7')
            k = c[i][j] + d[i][j] + b[i][j] - 48*3;
        else
            k = 0;
        if(k>9)
            return 9;
        else
            return k;
    }
    
    int main()
    {
        int t,n,m,i,j;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&m,&n);
            for(i = 0; i<n; i++)
                scanf("%s",a[i]);
            for(i = 0; i<n; i++)
                scanf("%s",b[i]);
            for(i = 0; i<n; i++)
                scanf("%s",c[i]);
            for(i = 0; i<n; i++)
                scanf("%s",d[i]);
            for(i = 0; i<n; i++)
            {
                for(j = 0; j<m; j++)
                {
                    printf("%d",fun(i,j));
                }
                printf("\n");
            }
        }
    }
    

     
  • 抱歉!评论已关闭.