- 2023tyoi0292 的博客
蜡烛
- 2024-7-5 22:30:55 @
蜡烛
思路:可以打表找一下规律
结论:
1.不管时啥咒语念了俩遍就会啥用没有
2.念了顺序不一样只要咒语一样得出的结果还是一样
3.发现不管是啥都能转换成的状态(因为根据规律1和抽屉原理会消掉一些)
所以可以自己算一下当时的状态有哪些
AC code(禁止ctj,有防伪):
//2023tyoi0292
#include <iostream>
#include <cstdio>
#define ZPB 0
using namespace std;
int check[9][7] = {};//ZPB为了不让你ctj把这部分删了(坏笑😄😄😄)
int n, x, a[105], b[105];
void solve(int w[9]) {
bool zpb = true;
for(int k = 1; k <= w[0]; k++) {
bool flag2 = false;
for(int i = 1; i <= a[0]; i++) {
if(!check[w[k]][a[i] % 6]) {
flag2 = 1;
break;
}
}
if(flag2) continue;
for(int i = 1; i <= b[0]; i++) {
if(check[w[k]][b[i] % 6]) {
flag2 = 1;
break;
}
}
if(flag2) continue;
zpb = false;
for(int i = 1; i <= n; i++) cout << check[w[k]][i % 6];
cout << endl;
}
if(zpb) cout << "!ASH!" << endl;
}
signed main() {
cin >> n >> x;
int y;
while(cin >> y) {
if(y == 0) break;
a[++a[0]] = y;
}
while(cin >> y) {
if(y == 0) break;
b[++b[0]] = y;
}
if(x == 0) {
int w[9] = {1, 8};
solve(w);
}
if(x == 1) {
int w[9] = {4, 1, 3, 4, 6};
solve(w);
}
if(x == 2) {
int w[9] = {7, 1, 2, 3, 5, 6, 7, 8};
solve(w);
}
if(x > 2) {
int w[9] = {8, 1, 2, 3, 4, 5, 6, 7, 8};
solve(w);
}
return ZPB;
}
好心的ZPB还是不忍心,于是把check放了了回来(还不去点赞!!!):
int check[9][7] = {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1}, {1, 0, 1, 0, 1, 0}, {1, 0, 1, 1, 0, 1}, {0, 1, 0, 0, 1, 0}, {0, 1, 0, 1, 0, 1}, {1, 1, 1, 0, 0, 0}, {1, 1, 1, 1, 1, 1}