제출 #836075

#제출 시각아이디문제언어결과실행 시간메모리
836075penguinmanSplit the Attractions (IOI19_split)C++17
0 / 100
28 ms4660 KiB
#include "split.h" #include <bits/stdc++.h> #ifndef EVAL #include "grader.cpp" #endif using std::cin; using std::cout; using std::endl; using std::vector; using std::string; using ll = long long; using vi = vector<ll>; using vii = vector<vi>; using pii = std::pair<ll,ll>; #define rep(i,j,k) for(ll i=ll(j); i<ll(k); i++) #define REP(i,j,k) for(ll i=ll(j); i<=ll(k); i++) #define per(i,j,k) for(ll i=ll(j); i>=ll(k); i--) #define all(a) a.begin(),a.end() #define pb emplace_back #define mp std::make_pair #define mtp std::make_tuple constexpr ll inf = (1ll<<60); vector<int> subtask_4(int n, int a, int b, int c, std::vector<int> p, std::vector<int> q){ ll N = n; vector<pii> data = {mp(a,1), mp(b,2), mp(c,3)}; sort(all(data)); vii edge(N); rep(i,0,p.size()){ edge[p[i]].pb(q[i]); edge[q[i]].pb(p[i]); } vector<int> ans(N, data[2].second); auto modify_all = [&](){ rep(i,0,2){ rep(j,0,N){ if(ans[j] == data[i].second){ vector<bool> visited(N); ll cnt = 0; std::function<void(ll)> modify = [&](ll now){ if(cnt < data[i].first){ cnt++; } else{ ans[now] = data[2].second; } visited[now] = true; for(auto next: edge[now]){ if(visited[next]) continue; if(ans[next] != data[i].second) continue; modify(next); } }; modify(j); break; } } } return; }; rep(i,0,N){ vector<bool> used(N); used[i] = true; vii v; for(auto next: edge[i]){ if(used[next]) continue; vi c; std::function<void(ll)> dfs = [&](ll now){ c.pb(now); used[now] = true; for(auto nex: edge[now]){ if(used[nex]) continue; dfs(nex); } }; dfs(next); v.pb(c); } ll sum = 1; rep(j,0,v.size()){ sum += v[j].size(); } rep(j,0,v.size()){ if(v[j].size() < data[0].first) continue; if(sum-v[j].size() < data[1].first) continue; rep(k,0,v.size()){ if(j == k) continue; for(auto el: v[k]) ans[el] = data[1].second; } ans[i] = data[1].second; for(auto el: v[j]) ans[el] = data[0].second; modify_all(); return ans; } rep(j,0,v.size()){ if(v[j].size() < data[1].first) continue; if(sum-v[j].size() < data[0].first) continue; rep(k,0,v.size()){ if(j == k) continue; for(auto el: v[k]) ans[el] = data[0].second; } ans[i] = data[0].second; for(auto el: v[j]) ans[el] = data[1].second; modify_all(); return ans; } } vector<bool> used(N); vii v; rep(i,0,N){ if(used[i]) continue; vi c; std::function<void(ll)> dfs = [&](ll now){ c.pb(now); used[now] = true; for(auto nex: edge[now]){ if(used[nex]) continue; dfs(nex); } }; dfs(i); v.pb(c); } rep(i,0,v.size()){ rep(j,0,v.size()){ if(i == j) continue; if(data[0].first > v[i].size()) continue; if(data[1].first > v[j].size()) continue; for(auto el: v[i]) ans[el] = data[0].second; for(auto el: v[j]) ans[el] = data[1].second; modify_all(); return ans; } } ans.assign(N,0); return ans; } std::vector<int> find_split(int n, int a, int b, int c, std::vector<int> p, std::vector<int> q) { if(n <= 2500) return subtask_4(n,a,b,c,p,q); vector<int> ans(n); return ans; }

컴파일 시 표준 에러 (stderr) 메시지

split.cpp: In function 'std::vector<int> subtask_4(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:94:19: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   94 |    if(v[j].size() < data[0].first) continue;
      |       ~~~~~~~~~~~~^~~~~~~~~~~~~~~
split.cpp:95:23: warning: comparison of integer expressions of different signedness: 'long long unsigned int' and 'long long int' [-Wsign-compare]
   95 |    if(sum-v[j].size() < data[1].first) continue;
      |       ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
split.cpp:106:19: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
  106 |    if(v[j].size() < data[1].first) continue;
      |       ~~~~~~~~~~~~^~~~~~~~~~~~~~~
split.cpp:107:23: warning: comparison of integer expressions of different signedness: 'long long unsigned int' and 'long long int' [-Wsign-compare]
  107 |    if(sum-v[j].size() < data[0].first) continue;
      |       ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
split.cpp:138:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  138 |    if(data[0].first > v[i].size()) continue;
split.cpp:139:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  139 |    if(data[1].first > v[j].size()) continue;
#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...