1012 8-bit Zoom
题意:
有一张尺寸为n*n的图片,你要将图片放大成
n
×
z
100
×
n
×
z
100
\frac{n×z}{100}×\frac{n×z}{100}
100n×z×100n×z的图片。
当下列任何一个条件不成立时,图片不能放大成上述的图片:
1.
n
×
z
100
\cfrac{n×z}{100}
100n×z不是整数。
2.在放大的图片中,无法确定某些像素的颜色。
给出图片,求能否放大,如果可以的话,输出放大后的图片,否则输出error。
题解:
先判断
n
×
z
100
\cfrac{n×z}{100}
100n×z是不是整数,不是的话就输出error
先给图片放大
z
25
\cfrac{z}{25}
25z倍,于是原本1×1的格子变成
z
100
×
z
100
\frac{z}{100}×\frac{z}{100}
100z×100z,然后检查每个4×4的格子里颜色是否相同,若不相同就输出error,否则将图片缩小
1
4
\cfrac{1}{4}
41,然后输出。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=105;
int flag;
char a[N][N],b[5*N][5*N];
int n,z,T;
int main()
{
cin>>T;
while(T--)
{
scanf("%d%d",&n,&z);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) cin>>a[i][j];
if(n*z%100!=0)
{
cout<<"error"<<endl;
continue;
}
int w=z/25;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=(i-1)*w+1;k<=i*w;k++)
for(int l=(j-1)*w+1;l<=j*w;l++) b[k][l]=a[i][j];
flag=0;
for(int i=1;i<=n*w;i+=4)
for(int j=1;j<=n*w;j+=4)
for(int k=0;k<4;k++)
for(int l=0;l<4;l++)
if(b[i+k][j+l]!=b[i][j]) flag=1;
if(flag) cout<<"error"<<endl;
else
{
for(int i=1;i<=w*n;i+=4)
{
for(int j=1;j<=w*n;j+=4)
{
cout<<b[i][j];
}
cout<<endl;
}
}
}
return 0;
}