답안 #753072

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
753072 2023-06-04T14:20:07 Z Username4132 Ili (COI17_ili) C++14
0 / 100
1 ms 340 KB
#include<iostream>
#include<bitset>
using namespace std;
#define forn(i, n) for(int i=0; i<(int)n; ++i)
 
const int MAXN=8;
int n, m, pr[MAXN][2];
bool pb[MAXN][2];
string info, ans;
bitset<MAXN> arr[MAXN], wi[MAXN], brr[MAXN], one("1"), zero("0"), nuli, uni;
 
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> m >> info;
    ans.assign(m, '?');
    forn(i, m){
        char c1, c2;
        int a1, a2;
        cin >> c1 >> a1 >> c2 >> a2;
        --a1, --a2;
        bitset<MAXN> bi1 = c1=='x'? (one<<a1) : arr[a1];
        bitset<MAXN> bi2 = c2=='x'? (one<<a2) : arr[a2];
        arr[i]=bi1|bi2;
        pb[i][0]=(c1=='x'), pb[i][1]=(c2=='x');
        pr[i][0]=a1, pr[i][1]=a2;
    }
    forn(i, m) if(info[i]=='0') nuli|=arr[i];
    nuli=~nuli;
    forn(i, m) if(info[i]=='1') uni|=(1<<i);
    forn(i, m){
        arr[i]&=nuli;
        if(arr[i].count()==0) ans[i]='0';
    }
    forn(i, m) forn(j, n) if((arr[i]&(one<<j)).count()) wi[j]|=(one<<i);
    forn(i, n) if((nuli&(one<<i)).count()==0) wi[i]=~zero;
    forn(i, m){
        bitset<MAXN> b1 = pb[i][0]? wi[pr[i][0]] : brr[pr[i][0]];
        bitset<MAXN> b2 = pb[i][1]? wi[pr[i][1]] : brr[pr[i][1]];
        brr[i]=b1&b2;
    }
    forn(i, m) if(info[i]=='1') forn(j, m) if((brr[i]&(one<<j)).count()) ans[j]='1';
    cout << ans << endl;    
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Runtime error 1 ms 340 KB Execution killed with signal 11
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Runtime error 1 ms 340 KB Execution killed with signal 11
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Runtime error 1 ms 340 KB Execution killed with signal 11
4 Halted 0 ms 0 KB -