답안 #660990

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
660990 2022-11-23T19:04:06 Z urosk 장난감 기차 (IOI17_train) C++14
22 / 100
1639 ms 1404 KB
#include "train.h"
#define dbg(x) cerr<<#x<<": "<<x<<endl
#define here cerr<<"===================================\n"
#include <bits/stdc++.h>
#define ll int
#define sz(a) (ll)(a.size())
#define pb push_back
#define popb pop_back
#define all(a) a.begin(),a.end()
#define llinf 1000000000LL
#define fi first
#define sc second
#define pll pair<ll,ll>
#define endl '\n'
#define ceri(a,l,r) {cerr<<#a<<": ";for(ll i_ = l;i_<=r;i_++) cerr<<a[i_]<< " ";cerr<<endl;}
using namespace std;
#define maxn 5005
ll n,m,it;
vector<ll> ans;
vector<ll> g[maxn];
vector<ll> cur;
ll b[maxn];
bool c[maxn];
bool vis[maxn];
bool naso = 0;
bool ok[maxn];
ll cnt = 0;
ll in[maxn],out[maxn];
void dfs(ll u,ll poc){
    vis[u] = 1;
    for(ll s : g[u]){
        if(c[s]) continue;
        if(s==poc){
            naso = 1;
            return;
        }
        if(vis[s]) continue;
        dfs(s,poc);
        if(naso) return;
    }
}
void dfs2(ll u,ll poc){
    if(c[u]) cnt++;
    vis[u] = 1;
    for(ll s : g[u]){
        if((s==poc)&&(cnt>0)){
            naso = 1;
            return;
        }
        if(vis[s]) continue;
        dfs2(s,poc);
        if(naso) return;
    }
    if(c[u]) cnt--;
}
void dfs3(ll u){
    vis[u] = 1;
    for(ll s : g[u]){
        if(vis[s]) continue;
        dfs3(s);
        ok[u]|=ok[s];
    }
}
bool dfs4(ll u){
    bool tu = 0;
    for(ll s : g[u]) if(s==u) tu = 1;
    if(!tu){
        if(sz(g[u])==0) return 1;
        return dfs4(g[u][0]);
    }
    if(!b[u]&&!c[u]) return 0;
    if(b[u]&&c[u]) return 1;
    for(ll s : g[u]){
        if(s!=u) return dfs4(s);
    }
}
vector<int> who_wins(vector<int> a,vector<int> r,vector<int> u,vector<int> v) {
    reverse(all(u)); u.pb(-1); reverse(all(u));
    reverse(all(v)); v.pb(-1); reverse(all(v));
    reverse(all(r)); r.pb(-1); reverse(all(r));
    ll sum = 0; for(ll x : a) sum+=x;
    n = sz(a);
    reverse(all(a)); a.pb(-1); reverse(all(a));
    for(ll i = 1;i<=n;i++) b[i] = a[i];
    m = sz(u)-1;
    bool sub1 = 1;
    for(ll i = 1;i<=n;i++) c[i] = r[i];
    for(ll i = 1;i<=m;i++){
        u[i]++; v[i]++;
        ll x = u[i]; ll y = v[i];
        g[x].pb(y);
        sub1&=((x==y)||(y-x==1));
    }
    if(sum==0){
        for(ll i = 1;i<=n;i++){
            if(c[i]) continue;
            for(ll j = 1;j<=n;j++) vis[j] = 0;
            naso = 0;
            dfs(i,i);
            if(naso) ok[i] = 1;
        }
        for(ll i = 1;i<=n;i++){
            for(ll j = 1;j<=n;j++) vis[j] = 0;
            dfs3(i);
        }
        for(ll i = 1;i<=n;i++) ans.pb(1^ok[i]);
        return ans;
    }
    if(sum==n){
        for(ll i = 1;i<=n;i++){
            for(ll j = 1;j<=n;j++) vis[j] = 0;
            naso = 0;
            cnt = 0;
            dfs2(i,i);
            if(naso) ok[i] = 1;
        }
        for(ll i = 1;i<=n;i++){
            for(ll j = 1;j<=n;j++) vis[j] = 0;
            dfs3(i);
        }
        for(ll i = 1;i<=n;i++) ans.pb(ok[i]);
        return ans;
    }
    if(sub1){
        for(ll i = 1;i<=n;i++){
            for(ll j = 1;j<=n;j++) vis[j] = 0;
            ok[i] = dfs4(i);
        }
        for(ll i = 1;i<=n;i++) ans.pb(ok[i]);
        return ans;
    }
	return {};
}

/*
4 6
0 0 0 0
0 1 0 0
0 1
0 2
0 3
1 2
1 3
2 3
*/

Compilation message

train.cpp: In function 'bool dfs4(int)':
train.cpp:76:1: warning: control reaches end of non-void function [-Wreturn-type]
   76 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 852 KB 3rd lines differ - on the 4997th token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 340 KB WA in grader: Wrong returned array size
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 293 ms 1404 KB Output is correct
2 Correct 259 ms 1364 KB Output is correct
3 Correct 258 ms 1328 KB Output is correct
4 Correct 1191 ms 1276 KB Output is correct
5 Correct 969 ms 1236 KB Output is correct
6 Correct 833 ms 1128 KB Output is correct
7 Correct 694 ms 1220 KB Output is correct
8 Correct 434 ms 1228 KB Output is correct
9 Correct 422 ms 1120 KB Output is correct
10 Correct 556 ms 1076 KB Output is correct
11 Correct 470 ms 1108 KB Output is correct
12 Correct 38 ms 1032 KB Output is correct
13 Correct 1558 ms 1308 KB Output is correct
14 Correct 1634 ms 1312 KB Output is correct
15 Correct 1639 ms 1300 KB Output is correct
16 Correct 1152 ms 1356 KB Output is correct
17 Correct 1178 ms 1284 KB Output is correct
18 Correct 466 ms 1120 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 645 ms 1108 KB Output is correct
2 Correct 199 ms 1028 KB Output is correct
3 Correct 365 ms 1108 KB Output is correct
4 Correct 367 ms 1220 KB Output is correct
5 Correct 518 ms 1116 KB Output is correct
6 Correct 440 ms 1228 KB Output is correct
7 Correct 455 ms 1080 KB Output is correct
8 Correct 332 ms 1100 KB Output is correct
9 Correct 23 ms 980 KB Output is correct
10 Correct 857 ms 1296 KB Output is correct
11 Correct 822 ms 1292 KB Output is correct
12 Correct 828 ms 1304 KB Output is correct
13 Correct 653 ms 1228 KB Output is correct
14 Correct 399 ms 1200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 980 KB WA in grader: Wrong returned array size
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 852 KB 3rd lines differ - on the 4997th token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -