답안 #57765

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
57765 2018-07-16T03:30:39 Z Benq Ili (COI17_ili) C++14
49 / 100
4000 ms 14000 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>

using namespace std;
using namespace __gnu_pbds;
 
typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef pair<ld,ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>;

#define FOR(i, a, b) for (int i=a; i<(b); i++)
#define F0R(i, a) for (int i=0; i<(a); i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)

#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()

const int MOD = 1000000007;
const ll INF = 1e18;
const int MX = 10001;

int n,m, status[MX];
bitset<MX> res[MX], posi;

bitset<MX> clas(string a) {
    int x = stoi(a.substr(1,sz(a)-1));
    if (a[0] == 'x') {
        bitset<MX> z;
        z[x] = 1;
        return z;
    }
    return res[x];
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin >> n >> m;
    FOR(i,1,m+1) {
        char c; cin >> c;
        if ('0' <= c && c <= '1') status[i] = c-'0';
        else status[i] = -1;
    }
    FOR(i,1,m+1) {
        string a,b; cin >> a >> b;
        res[i] = clas(a)|clas(b);
        if (status[i] == 0) posi |= res[i];
    }
    posi.flip();
    FOR(i,1,m+1) res[i] &= posi;
    FOR(i,1,m+1) if (status[i] == -1) {
    	if (res[i].count() == 0) {
    		status[i] = 0;
    		continue;
    	}
    	FOR(j,1,m+1) if (status[j] == 1 && (res[j]&res[i]) == res[j]) {
    		status[i] = 1;
    		break;
    	}
    }
    FOR(i,1,m+1) {
    	if (status[i] == -1) cout << "?";
    	else cout << status[i];
    }
}

/* Look for:
* the exact constraints (multiple sets are too slow for n=10^6 :( ) 
* special cases (n=1?)
* overflow (ll vs int?)
* array bounds
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
2 Correct 2 ms 504 KB Output is correct
3 Correct 2 ms 544 KB Output is correct
4 Correct 2 ms 560 KB Output is correct
5 Correct 2 ms 692 KB Output is correct
6 Correct 2 ms 788 KB Output is correct
7 Correct 2 ms 788 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
2 Correct 2 ms 504 KB Output is correct
3 Correct 2 ms 544 KB Output is correct
4 Correct 2 ms 560 KB Output is correct
5 Correct 2 ms 692 KB Output is correct
6 Correct 2 ms 788 KB Output is correct
7 Correct 2 ms 788 KB Output is correct
8 Correct 8 ms 1288 KB Output is correct
9 Correct 8 ms 1288 KB Output is correct
10 Correct 8 ms 1300 KB Output is correct
11 Correct 7 ms 1324 KB Output is correct
12 Correct 7 ms 1332 KB Output is correct
13 Correct 5 ms 1340 KB Output is correct
14 Correct 7 ms 1492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
2 Correct 2 ms 504 KB Output is correct
3 Correct 2 ms 544 KB Output is correct
4 Correct 2 ms 560 KB Output is correct
5 Correct 2 ms 692 KB Output is correct
6 Correct 2 ms 788 KB Output is correct
7 Correct 2 ms 788 KB Output is correct
8 Correct 8 ms 1288 KB Output is correct
9 Correct 8 ms 1288 KB Output is correct
10 Correct 8 ms 1300 KB Output is correct
11 Correct 7 ms 1324 KB Output is correct
12 Correct 7 ms 1332 KB Output is correct
13 Correct 5 ms 1340 KB Output is correct
14 Correct 7 ms 1492 KB Output is correct
15 Correct 121 ms 8468 KB Output is correct
16 Correct 1260 ms 9884 KB Output is correct
17 Correct 566 ms 11760 KB Output is correct
18 Correct 3342 ms 13620 KB Output is correct
19 Correct 982 ms 13620 KB Output is correct
20 Correct 2493 ms 13876 KB Output is correct
21 Execution timed out 4034 ms 14000 KB Time limit exceeded
22 Halted 0 ms 0 KB -