2020-11-14牛客小白月赛29-C
[by_041]
-
首先,,我恨啊啊啊啊啊,赛场上少加个输出空格!!!!!(长记性!!)
-
这玩意就是个重复方块的拼图,你会发现,单独的,要满足题设条件的同色方块都要摆成 ( 1 × 2 × 2 ) (1\times2\times2) (1×2×2)大小的单位方块(四个同色方块在一个平面上摆一个田字),就和样例输入是2的数据一样(他的输出是一个黑的单位块和一个白的单位块组合成的)
-
然后就是拓展单位块的问题了,我用的是类似dp的方法(其实,毕竟是bool量的,构建可以更优)
-
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
void swp(int&a,int&b)
{a^=b;b^=a;a^=b;return;}
int maxx(int a,int b)
{return a>b?a:b;}
int minn(int a,int b)
{return a<b?a:b;}
int input()
{char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
int a=ch-'0';
while((ch=getchar())>='0'&&ch<='9')
a=(a<<3)+(a<<1)+ch-'0';
return a;
}
void output(int a)
{
if(a>9)
output(a/10);
putchar(a%10+'0');
return;
}
int n;
// bool b=true;
bool a[102][102][102];
int main()
{
n=input(); if(n&1)
{
puts("-1");
return 0;
}
a[1][1][1]=1;
a[1][1][2]=1;
a[1][2][1]=0;
a[1][2][2]=0;
a[2][1][1]=1;
a[2][1][2]=1;
a[2][2][1]=0;
a[2][2][2]=0;
for(int i=3;i<=n;i++)
{
a[1][1][i]=!a[1][1][i-2];
a[1][2][i]=!a[1][2][i-2];
a[2][1][i]=!a[2][1][i-2];
a[2][2][i]=!a[2][2][i-2];
}
for(int i=3;i<=n;i++)
for(int j=1;j<=n;j++)
{
a[1][i][j]=a[1][i-2][j];
a[2][i][j]=a[2][i-2][j];
}
for(int i=3;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
a[i][j][k]=!a[i-2][j][k];
}
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++,putchar('\n'))
for(int k=1;k<=n;k++)
putchar('0'+bool(a[i][j][k])),putchar(' ');
return 0;
}