답안 #660980

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
660980 2022-11-23T18:57:54 Z urosk 장난감 기차 (IOI17_train) C++14
22 / 100
1904 ms 1524 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 0;
        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++){
        if(sz(g[i])==0){
            while(1) here;
        }
    }
        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 Correct 23 ms 980 KB Output is correct
2 Incorrect 14 ms 952 KB 3rd lines differ - on the 4997th token, expected: '1', found: '0'
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB WA in grader: Wrong returned array size
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 331 ms 1524 KB Output is correct
2 Correct 302 ms 1492 KB Output is correct
3 Correct 305 ms 1452 KB Output is correct
4 Correct 1315 ms 1408 KB Output is correct
5 Correct 1077 ms 1356 KB Output is correct
6 Correct 922 ms 1260 KB Output is correct
7 Correct 836 ms 1236 KB Output is correct
8 Correct 521 ms 1244 KB Output is correct
9 Correct 480 ms 1244 KB Output is correct
10 Correct 653 ms 1200 KB Output is correct
11 Correct 568 ms 1184 KB Output is correct
12 Correct 49 ms 1152 KB Output is correct
13 Correct 1783 ms 1436 KB Output is correct
14 Correct 1904 ms 1428 KB Output is correct
15 Correct 1726 ms 1424 KB Output is correct
16 Correct 1136 ms 1444 KB Output is correct
17 Correct 1182 ms 1436 KB Output is correct
18 Correct 478 ms 1216 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 658 ms 1236 KB Output is correct
2 Correct 202 ms 1168 KB Output is correct
3 Correct 376 ms 1236 KB Output is correct
4 Correct 367 ms 1200 KB Output is correct
5 Correct 557 ms 1236 KB Output is correct
6 Correct 438 ms 1236 KB Output is correct
7 Correct 468 ms 1196 KB Output is correct
8 Correct 360 ms 1192 KB Output is correct
9 Correct 23 ms 1108 KB Output is correct
10 Correct 968 ms 1432 KB Output is correct
11 Correct 889 ms 1484 KB Output is correct
12 Correct 944 ms 1512 KB Output is correct
13 Correct 694 ms 1384 KB Output is correct
14 Correct 457 ms 1280 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 1208 KB WA in grader: Wrong returned array size
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 980 KB Output is correct
2 Incorrect 14 ms 952 KB 3rd lines differ - on the 4997th token, expected: '1', found: '0'
3 Halted 0 ms 0 KB -