제출 #1227140

#제출 시각아이디문제언어결과실행 시간메모리
1227140emptypringlescanBroken Device (JOI17_broken_device)C++17
100 / 100
39 ms1536 KiB
#include "Annalib.h" #include <bits/stdc++.h> using namespace std; /* * 001: 0 * 010: 10 * 011: 11 * 100: 1 * 101: 01 * 110: 0 * 111: 00 */ void Anna( int n, long long x, int k, int p[] ){ int ans[n]; memset(ans,-1,sizeof(ans)); for(int i=0; i<k; i++) ans[p[i]]=0; int msg[65]; memset(msg,0,sizeof(msg)); for(long long i=0; i<60; i++) msg[i]=(!!(x&(1ll<<i))); int cur=0; for(int i=0; i<n; i+=3){ if(cur>60) break; int bad=0; for(int j=0; j<3; j++) bad+=(ans[i+j]==0); if(bad>1) continue; if(bad==1){ if(msg[cur]==0&&ans[i+2]!=0) ans[i+2]=1; else if(msg[cur]==0) ans[i]=ans[i+1]=1; else if(ans[i]!=0) ans[i]=1; else if(msg[cur+1]==0) ans[i+1]=1,cur++; else ans[i+1]=ans[i+2]=1,cur++; cur++; } else{ if(msg[cur]==0&&msg[cur+1]==0) ans[i]=ans[i+1]=ans[i+2]=1; else if(msg[cur]==0&&msg[cur+1]==1) ans[i]=ans[i+2]=1; else if(msg[cur]==1&&msg[cur+1]==0) ans[i+1]=1; else ans[i+1]=ans[i+2]=1; cur+=2; } } for(int i=0; i<n; i++) ans[i]=max(ans[i],0); for(int i=0; i<n; i++) Set(i,max(ans[i],0)); }
#include "Brunolib.h" #include <bits/stdc++.h> using namespace std; /* * 001: 0 * 010: 10 * 011: 11 * 100: 1 * 101: 01 * 110: 0 * 111: 00 */ long long Bruno( int n, int a[] ){ vector<int> bts; vector<vector<int> > ref={{},{0},{1,0},{1,1},{1},{0,1},{0},{0,0}}; for(int i=0; i<n; i+=3){ int bm=0; for(int j=0; j<3; j++){ bm*=2; bm+=a[i+j]; } if(bm==0) continue; for(int j:ref[bm]) bts.push_back(j); } long long ret=0; for(long long i=0; i<60; i++) if(bts[i]) ret^=(1ll<<i); return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...