Submission #390143

#TimeUsernameProblemLanguageResultExecution timeMemory
390143mehrdad_sohrabiToy Train (IOI17_train)C++14
100 / 100
504 ms1988 KiB
#include <bits/stdc++.h> #include "train.h" /// 500 485 462 A4 using namespace std; typedef long long int ll; typedef complex<double> point; typedef long double ld; #define pb push_back #define pii pair < ll , ll > #define F first #define S second //#define endl '\n' #define int long long #define sync ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0) #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math") #define kill(x) return cout<<x<<'\n', 0; const int N=5e3+10,inf=(ll)1e15; ll vis[N]; ll t[N]; vector <int> g[N],in[N]; ll mark[N]; std::vector<int32_t> who_wins(std::vector<int32_t> A, std::vector<int32_t> R, std::vector<int32_t> U, std::vector<int32_t> V) { ll n=A.size(),m=U.size(); for (int i=0;i<n;i++){ g[i].clear(); in[i].clear(); vis[i]=0; } for (int i=0;i<U.size();i++){ g[U[i]].pb(V[i]); in[V[i]].pb(U[i]); } ll cnt=0; while(true){ queue <int> q; for (int i=0;i<n;i++){ t[i]=g[i].size(); mark[i]=0; if (vis[i]==0 && R[i]==1){ q.push(i); t[i]=0; } } while(q.size()){ ll v=q.front(); if (mark[v]) cout << 1/0 << endl; mark[v]=1; t[v]=0; q.pop(); for (auto u : in[v]){ // cout << u << " " << v << " " << A[u] << " " << t[u] << endl; if (A[u]==1 && t[u]!=0){ t[u]=0; q.push(u); } else if (t[u]!=0){ t[u]--; if (t[u]==0) q.push(u); } } } ll p1=0; for (int i=0;i<n;i++){ if (vis[i] || R[i]==0) continue; ll p2=0; ll p3=0; for (auto u : g[i]){ if (t[u]==0) p2=1; else p3=1; } if (p2==0 || (A[i]==0 && p3==1)){ p1=1; vis[i]=1; } } if (p1==0) break; } ll p1=0; for (int i=0;i<n;i++){ if (vis[i]==0 && R[i]==1) p1=1; } vector <int32_t> ans; for (int i=0;i<n;i++){ if (p1==0) ans.pb(0); else { if (t[i]==0) ans.pb(1); else ans.pb(0); } } return ans; } /* int32_t main() { int n, m; assert(2 == scanf("%d %d", &n, &m)); vector<int32_t> a(n), r(n), u(m), v(m); for(int i = 0; i < n; i++) assert(1 == scanf("%d", &a[i])); for(int i = 0; i < n; i++) assert(1 == scanf("%d", &r[i])); for(int i = 0; i < m; i++) assert(2 == scanf("%d %d", &u[i], &v[i])); vector<int32_t> res = who_wins(a, r, u, v); for(int i = 0; i < (int)res.size(); i++) printf(i ? " %d" : "%d", res[i]); printf("\n"); return 0; } */ /* 15 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 1 0 10 7 1 13 3 1 7 6 14 8 2 7 4 11 6 7 5 13 6 13 4 0 3 7 4 12 5 11 2 8 3 9 0 6 8 9 3 0 2 0 13 6 8 13 9 7 5 10 12 12 14 11 2 10 1 0 2 9 10 14 9 0 11 13 5 6 14 5 14 10 7 13 10 4 11 1 0 1 2 3 */ /* 10 7 14 8 2 7 4 11 4 0 3 7 4 12 5 11 2 8 3 9 8 9 3 0 2 0 9 7 12 12 14 11 2 9 9 0 14 5 2 3 */

Compilation message (stderr)

train.cpp: In function 'std::vector<int> who_wins(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
train.cpp:29:16: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |  for (int i=0;i<U.size();i++){
      |               ~^~~~~~~~~
train.cpp:46:35: warning: division by zero [-Wdiv-by-zero]
   46 |             if (mark[v]) cout << 1/0 << endl;
      |                                  ~^~
train.cpp:23:16: warning: unused variable 'm' [-Wunused-variable]
   23 |  ll n=A.size(),m=U.size();
      |                ^
train.cpp:33:5: warning: unused variable 'cnt' [-Wunused-variable]
   33 |  ll cnt=0;
      |     ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...