結果
| 問題 |
No.5005 3-SAT
|
| ユーザー |
tails
|
| 提出日時 | 2022-04-29 16:39:46 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,956 ms / 2,000 ms |
| コード長 | 1,742 bytes |
| コンパイル時間 | 525 ms |
| 実行使用メモリ | 6,952 KB |
| スコア | 37,927 |
| 最終ジャッジ日時 | 2022-04-29 16:44:07 |
| 合計ジャッジ時間 | 198,806 ms |
|
ジャッジサーバーID (参考情報) |
judge13 / judge15 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 100 |
ソースコード
#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")
#include <vector>
#include <bitset>
#include <cstring>
using namespace std;
#include <time.h>
long clock_begin;
unsigned long xorshift64_val;
void xorshift64_init(){
xorshift64_val = 88172645463325252UL + time(0);
}
unsigned long xorshift64() {
xorshift64_val ^= xorshift64_val << 7;
return xorshift64_val ^= xorshift64_val >> 9;
}
#define N 2048
struct Clause {
int a[3];
int p[3];
};
Clause cs[N];
vector<int> aa[256][2];
int score;
char best[256];
char curr[256];
vector<int> q;
bitset<N> qm;
int bb[256][2];
int bbv;
void owari(){
dprintf(2,"score=%d\n",score);
for(int i=256;i--;){
putchar('0'+best[i]);
}
exit(0);
}
void enq(int i){
if(!qm[i]){
qm[i]=1;
q.push_back(i);
}
}
int deq(){
int i=q.back();
q.pop_back();
qm[i]=0;
return i;
}
int main(){
clock_begin=clock();
for(int i=0;i<N;++i){
for(int j=0;j<3;++j){
scanf("%d",&cs[i].a[j]);
}
for(int j=0;j<3;++j){
scanf("%d",&cs[i].p[j]);
aa[cs[i].a[j]][cs[i].p[j]].push_back(i);
}
}
do{
for(int t=0;t<100;++t){
if(q.empty()){
memcpy(best,curr,256);
if(++score==N){
owari();
}
enq(score-1);
}
int i=deq();
if(curr[cs[i].a[0]]!=cs[i].p[0] && curr[cs[i].a[1]]!=cs[i].p[1] && curr[cs[i].a[2]]!=cs[i].p[2]){
int j=0;
if(bb[cs[i].a[j]][cs[i].p[j]]>bb[cs[i].a[1]][cs[i].p[1]]){
j=1;
}
if(bb[cs[i].a[j]][cs[i].p[j]]>bb[cs[i].a[2]][cs[i].p[2]]){
j=1;
}
bb[cs[i].a[j]][cs[i].p[j]]=++bbv;
int aj=cs[i].a[j];
int pj=cs[i].p[j];
curr[aj]=pj;
for(int k:aa[aj][1-pj]){
if(k<score){
enq(k);
}
}
}
}
}while(clock()-clock_begin<CLOCKS_PER_SEC*1900/1000);
owari();
return 0;
}
tails