제출 #637005

#제출 시각아이디문제언어결과실행 시간메모리
637005Spade1Flood (IOI07_flood)C++14
100 / 100
94 ms28140 KiB
#include<bits/stdc++.h> #define pii pair<int, int> #define pll pair<long long, long long> #define ll long long #define ld long double #define st first #define nd second #define pb push_back #define INF INT_MAX using namespace std; const int N = 1e5 + 10; //direction: 0 = down, 1 = left, 2 = up, 3 = right pii pt[N]; pii wall[N][4]; bool w[N][4]; int order[N]; int vis[2*N]; vector<int> pass; bool out = 0; void walk(int i, int dir) { for (int j = -1; j <= 2; ++j) { int cur = (dir+j+4)%4; auto [p, n] = wall[i][cur]; if (p == -1 || vis[n]) continue; if (w[i][cur]) { out = 1; break; } pass.pb(n); w[i][cur] = 1; walk(p, cur); if (out) break; } } bool cmp(int a, int b) { return pt[a] < pt[b]; } void solve() { int n; cin >> n; for (int i = 1; i <= n; ++i) { cin >> pt[i].st >> pt[i].nd; } int m; cin >> m; for (int i = 1; i <= n; ++i) for (int j = 0; j < 4; ++j) wall[i][j] = {-1, -1}; for (int i = 1; i <= m; ++i) { int a, b; cin >> a >> b; if (pt[a].st == pt[b].st) { if (pt[a].nd > pt[b].nd) wall[a][0] = {b, i}, wall[b][2] = {a, i}; else wall[a][2] = {b, i}, wall[b][0] = {a, i}; } else { if (pt[a].st > pt[b].st) wall[a][1] = {b, i}, wall[b][3] = {a, i}; else wall[a][3] = {b, i}, wall[b][1] = {a, i}; } } for (int i = 1; i <= n; ++i) order[i] = i; sort(order+1, order+n+1, cmp); for (int i = 1; i <= n; ++i) { int j = order[i]; int idx = pass.size(); out = 0; walk(j, 2); for (int k = idx; k < pass.size(); ++k) vis[pass[k]]++; } int cnt = 0; for (int i = 1; i <= m; ++i) cnt += (vis[i]==2); cout << cnt << '\n'; for (int i = 1; i <= m; ++i) if (vis[i] == 2) cout << i << '\n'; } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); int t = 1; // cin >> t; while (t--) { solve(); } }

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

flood.cpp: In function 'void walk(int, int)':
flood.cpp:26:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   26 |         auto [p, n] = wall[i][cur];
      |              ^
flood.cpp: In function 'void solve()':
flood.cpp:69:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |         for (int k = idx; k < pass.size(); ++k) vis[pass[k]]++;
      |                           ~~^~~~~~~~~~~~~
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...