QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#101787 | #6380. LaLa and Divination Magic | Zeardoe | RE | 0ms | 0kb | C++20 | 3.0kb | 2023-05-01 08:28:07 | 2023-05-01 08:28:12 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
//use ll instead of int.
#define f(i, a, b) for(int i = (a); i <= (b); i++)
#define cl(i, n) i.clear(),i.resize(n);
#define endl '\n'
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int inf = 1e9;
//#define cerr if(false)cerr
//#define freopen if(false)freopen
#define watch(x) cerr << (#x) << ' '<<'i'<<'s'<<' ' << x << endl
void pofe(int number, int bitnum) {
string s; f(i, 0, bitnum) {s += char(number & 1) + '0'; number >>= 1; }
reverse(s.begin(), s.end()); cerr << s << endl;
return;
}
template <typename TYP> void cmax(TYP &x, TYP y) {if(x < y) x = y;}
template <typename TYP> void cmin(TYP &x, TYP y) {if(x > y) x = y;}
//调不出来给我对拍!
//use std::array.
time_t alltime = 0;
vector<bitset<2000>> s;int ord[2020];
int n,m; struct syz {int x,y,z;};
bool vt[2020][2020][4];int trie[2020*2020][2];int cnt=1;int memo[2020];
bool dfs(int step, int cur) {
// cerr<<step<<" "<<cur<<endl;
// f(i,0,step-1)cerr<<memo[i];
// cerr<<endl;
if(step==m){return cur;}
f(i,0,1){
bool ok=1;
f(j,0,step-1)if(vt[j][step][(memo[j]<<1) + i]==0){ok=0;break;}
if(vt[step][step][(i<<1)+i]==0){ok=0;}
if(ok){
memo[step]=i;
if(cur==0){
if(!dfs(step+1,0)) return 0;
}
else {
if(!dfs(step+1,trie[cur][i])) return 0;
}
}
}
return 1;
}
void build(){
f(i,0,n-1){
int cur=1;
f(j,0,m-1){
if(!trie[cur][s[i][j]]) trie[cur][s[i][j]] = ++cnt;
cur = trie[cur][s[i][j]];
}
}
return;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
freopen("G.in","r",stdin);
freopen("G.out","w",stdout);
//freopen();
//think twice,code once.
//think once,debug forever.
cin>>n>>m;s.resize(n);
f(i,0,n-1){f(j,0,m-1){char ct;cin>>ct;s[i][j]=ct-'0';}}build();
mt19937 rng(time(0));
shuffle(ord+1,ord+n+1,rng);vector<syz> v;
f(i,0,m-1)f(j,i,m-1){
bitset<4> ok;//time_t start = clock();
f(k,0,n-1){
ok[(s[k][i]<<1) + s[k][j]] = 1;
}//time_t finish = clock(); alltime += finish - start;
f(t,0,3){
if(!ok[t]){if(i!=j || t==0 || t==3)v.push_back({i,j,(t==0?4:(t==3?1:t+1))});}
else vt[i][j][t]=1;
}
}
if(!dfs(0,1)) {
cout << -1 << endl;
// cerr << "time used:" << alltime * 1.0 / CLOCKS_PER_SEC <<"s"<< endl;
return 0;
}
// time_t finish = clock(); alltime += finish - start << endl;
cout<<v.size()<<endl;
for(syz it : v)cout<<it.x<<" "<<it.y<<" "<<it.z<<endl;
//
// cerr << "time used:" << alltime * 1.0 / CLOCKS_PER_SEC <<"s"<< endl;
return 0;
}
/*
2023/4/29
start thinking at 11:24
start coding at h:mm
finish debugging at h:mm
*/
详细
Test #1:
score: 0
Dangerous Syscalls
input:
2 1 1 0