답안 #660992

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
660992 2022-11-23T19:05:33 Z urosk 장난감 기차 (IOI17_train) C++14
22 / 100
1658 ms 1432 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){
            cout<<u<<" ";
            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:79:1: warning: control reaches end of non-void function [-Wreturn-type]
   79 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 852 KB secret mismatch
2 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 277 ms 1396 KB Output is correct
2 Correct 285 ms 1364 KB Output is correct
3 Correct 341 ms 1340 KB Output is correct
4 Correct 1288 ms 1272 KB Output is correct
5 Correct 1008 ms 1236 KB Output is correct
6 Correct 886 ms 1256 KB Output is correct
7 Correct 739 ms 1088 KB Output is correct
8 Correct 449 ms 1228 KB Output is correct
9 Correct 428 ms 1124 KB Output is correct
10 Correct 577 ms 1088 KB Output is correct
11 Correct 488 ms 1048 KB Output is correct
12 Correct 39 ms 1032 KB Output is correct
13 Correct 1487 ms 1296 KB Output is correct
14 Correct 1658 ms 1356 KB Output is correct
15 Correct 1627 ms 1236 KB Output is correct
16 Correct 1160 ms 1432 KB Output is correct
17 Correct 1174 ms 1288 KB Output is correct
18 Correct 480 ms 1108 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 662 ms 1108 KB Output is correct
2 Correct 210 ms 1020 KB Output is correct
3 Correct 410 ms 1116 KB Output is correct
4 Correct 418 ms 1092 KB Output is correct
5 Correct 545 ms 1120 KB Output is correct
6 Correct 461 ms 1112 KB Output is correct
7 Correct 486 ms 1076 KB Output is correct
8 Correct 365 ms 1068 KB Output is correct
9 Correct 29 ms 1040 KB Output is correct
10 Correct 934 ms 1304 KB Output is correct
11 Correct 866 ms 1308 KB Output is correct
12 Correct 908 ms 1312 KB Output is correct
13 Correct 722 ms 1284 KB Output is correct
14 Correct 440 ms 1080 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 980 KB WA in grader: Wrong returned array size
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 852 KB secret mismatch
2 Halted 0 ms 0 KB -