2020-11-14牛客小白月赛29-C
积木
https://ac.nowcoder.com/acm/contest/8564/C
2020-11-14牛客小白月赛29-C
[by_041]
首先,,我恨啊啊啊啊啊,赛场上少加个输出空格!!!!!(长记性!!)
这玩意就是个重复方块的拼图,你会发现,单独的,要满足题设条件的同色方块都要摆成
大小的单位方块(四个同色方块在一个平面上摆一个田字),就和样例输入是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; }