关灯计划(卡住的点:楼层是从下往上,包括输出前补0,包括用scanf会溢出,用cin就不会)

关灯计划
Time Limit: 500 ms Memory Limit: 65536 KiB
Special Judge

Submit Statistic
Problem Description

在某次活动上,某组织打算控制一栋宿舍楼的灯光来进行一次灯光表演。
他们的实现方式是使所有宿舍全部打开房间内电灯开关,然后通过自己控制电闸来使部分房间通电亮灯,从而摆出一定的图案。
已知该宿舍楼有 n 层,每层有 m 个房间,房间号从右向左递增,且房间号都是奇数。
由于这个组织为了表演控制宿舍通电造成了在宿舍的同学的诸多不便,现在小暗打算破坏他们的亮灯活动。
他可以和宿舍楼里相关宿舍的人私下勾结,使得本该亮灯的宿舍在亮灯时自主关掉自己房间的灯的开关,导致即使电闸控制通电,这个房间的灯光依然不亮,从而破坏原本计划摆出的图案。
现在给出原始计划摆出的图案,以及小暗打算恶搞成的新图案。请判断小暗的计划是否可行,如果可行输出要私下勾结的宿舍号(宿舍只有奇数号,从右到左房间号递增)。
Input

第一行输入两个整数 n、m。
接下来先输入 n 行,每行 m 个字符,表示初始的亮灯图案(@ 表示亮,. 表示暗)。
最后再输入 n 行,每行 m 个字符,表示小暗计划达成的亮灯图案。
1 <= n <= 9
1 <= m <= 50
Output

如果小暗的计划可以达成,则将所有需要勾结关掉开关的宿舍号输出,每行一个,顺序任意。
宿舍号的格式为:第一位是楼层号,第二位和第三位是房间序号,从 1 开始,不足 10 的前面补 0。
如果计划不可达成,输出 “bark”(不包括引号)。
Sample Input

5 5
@@@@@
@….
@@@@@
….@
@@@@@
…..
…..
@@@@@
…..
…..
Sample Output

101
103
105
107
109
201
409
501
503
505
507
509
Hint

Source

bLue

#include<stdio.h>
#include<stdlib.h>
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
char a[15][60],b[15][60];
int main()
{
    int i,j,k,p,n,m,f=1;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
           cin>>a[i][j];//用cin不会溢出,但是用scanf会溢出
        }
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cin>>b[i][j];
        }
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(b[i][j]=='@'&&a[i][j]=='.')//如果恶搞的是开灯,但是原先是关灯,就没有办法可以做到
            {
                f=0;
                break;
            }
        }
    }
    if(f==0)
    {
        printf("bark\n");
    }
    if(f)
    {
        for(i=n,k=1;i>=1&&k<=n;i--,k++)
        {
            for(j=m,p=1;j>=1&&p<=m;j--,p++)
            {
                if(a[i][j]=='@'&&b[i][j]=='.')
                {
                    printf("%d%02d\n",k,2*p-1);//这里的输出真的是很神奇啊,但是一直在纠结一位的时候怎么前补0,还要注意题目要求,从右往左是递增的
                }
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/bhliuhan/article/details/80696046