제출 #835491

#제출 시각아이디문제언어결과실행 시간메모리
835491mousebeaver자리 배치 (IOI18_seats)C++14
17 / 100
4030 ms66440 KiB
#include "seats.h" #include <bits/stdc++.h> #define pii pair<int, int> using namespace std; struct inf { int r1; int r2; int c1; int c2; bool possible; }; vector<inf> a(0); vector<pii> p(0); int counter = 1; void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) { int n = H*W; for(int i = 0; i < n; i++) { p.push_back({R[i], C[i]}); } a = {{p[0].first, p[0].first, p[0].second, p[0].second, true}}; for(int i = 1; i < n; i++) { a.push_back(a.back()); a.back().r1 = min(a.back().r1, p[i].first); a.back().r2 = max(a.back().r2, p[i].first); a.back().c1 = min(a.back().c1, p[i].second); a.back().c2 = max(a.back().c2, p[i].second); a.back().possible = ((1+a.back().r2-a.back().r1)*(1+a.back().c2-a.back().c1) == i+1); counter += a.back().possible; } } int swap_seats(int d, int b) { if(d > b) { swap(d, b); } swap(p[d], p[b]); for(int i = d; i <= b; i++) { counter -= a[i].possible; if(i == 0) { a[i] = {p[0].first, p[0].first, p[0].second, p[0].second, true}; } else { a[i] = a[i-1]; } a[i].r1 = min(a[i].r1, p[i].first); a[i].r2 = max(a[i].r2, p[i].first); a[i].c1 = min(a[i].c1, p[i].second); a[i].c2 = max(a[i].c2, p[i].second); a[i].possible = ((1+a[i].r2-a[i].r1)*(1+a[i].c2-a[i].c1) == i+1); counter += a[i].possible; } return counter; }
#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...