답안 #660989

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
660989 2022-11-23T19:03:19 Z urosk 장난감 기차 (IOI17_train) C++14
22 / 100
1643 ms 1468 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){
        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:75:1: warning: control reaches end of non-void function [-Wreturn-type]
   75 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Runtime error 12 ms 1468 KB Execution killed with signal 11
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 286 ms 1400 KB Output is correct
2 Correct 261 ms 1376 KB Output is correct
3 Correct 256 ms 1336 KB Output is correct
4 Correct 1174 ms 1284 KB Output is correct
5 Correct 978 ms 1236 KB Output is correct
6 Correct 868 ms 1128 KB Output is correct
7 Correct 705 ms 1108 KB Output is correct
8 Correct 448 ms 1228 KB Output is correct
9 Correct 441 ms 1120 KB Output is correct
10 Correct 575 ms 1100 KB Output is correct
11 Correct 477 ms 1064 KB Output is correct
12 Correct 38 ms 980 KB Output is correct
13 Correct 1578 ms 1300 KB Output is correct
14 Correct 1643 ms 1292 KB Output is correct
15 Correct 1623 ms 1308 KB Output is correct
16 Correct 1121 ms 1296 KB Output is correct
17 Correct 1162 ms 1292 KB Output is correct
18 Correct 476 ms 1108 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 618 ms 1108 KB Output is correct
2 Correct 197 ms 1036 KB Output is correct
3 Correct 363 ms 1112 KB Output is correct
4 Correct 378 ms 1108 KB Output is correct
5 Correct 509 ms 1108 KB Output is correct
6 Correct 429 ms 1108 KB Output is correct
7 Correct 467 ms 1088 KB Output is correct
8 Correct 326 ms 1060 KB Output is correct
9 Correct 23 ms 1048 KB Output is correct
10 Correct 866 ms 1432 KB Output is correct
11 Correct 838 ms 1292 KB Output is correct
12 Correct 798 ms 1316 KB Output is correct
13 Correct 668 ms 1180 KB Output is correct
14 Correct 389 ms 1088 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 1108 KB WA in grader: Wrong returned array size
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 12 ms 1468 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -