제출 #1171775

#제출 시각아이디문제언어결과실행 시간메모리
1171775LaMatematica14모자이크 (IOI24_mosaic)C++20
7 / 100
84 ms27024 KiB
#include <bits/stdc++.h> using namespace std; vector<long long> mosaic(vector<int> X, vector<int> Y, vector<int> T, vector<int> B, vector<int> L, vector<int> R) { int N = X.size(); vector<int> fr(N), sr(N), tr(N); vector<int> fc(N), sc(N), tc(N); fr = X; fc = Y; sr[0] = fc[1]; for (int i = 1; i < N; i++) sr[i] = !(fr[i]||sr[i-1]); tr[0] = fc[2]; for (int i = 1; i < N; i++) tr[i] = !(sr[i]||tr[i-1]); sc[0] = fr[1]; for (int i = 1; i < N; i++) sc[i] = !(fc[i]||sc[i-1]); tc[0] = fr[2]; for (int i = 1; i < N; i++) tc[i] = !(sc[i]||tc[i-1]); vector<int> diag(2*N); int a = 0; for (int i = N-1; i > 2; i--) diag[a++] = tc[i]; for (int i = 2; i < N; i++) diag[a++] = tr[i]; auto prefixa = [&](vector<int> &a, vector<long long> &p) { p.resize(a.size()+1); p[0] = 0; for (int i = 0; i < N; i++) p[i+1] = p[i]+a[i]; }; vector<long long> pfr, pfc, psr, psc, pdiag; prefixa(fr, pfr); prefixa(fc, pfc); prefixa(sr, psr); prefixa(sc, psc); prefixa(diag, pdiag); int M = T.size(); vector<long long> ans(M, 0); for (int i = 0; i < M; i++) { if (T[i] == 0) ans[i] = pfr[R[i]+1]-pfr[L[i]]; else if (T[i] == 1) ans[i] = psr[R[i]+1]-psr[L[i]]; else { if (L[i] == 0) { ans[i] += fc[T[i]]; L[i]++; if (R[i] == 0) continue; } if (L[i] == 1) { ans[i] += sc[T[i]]; L[i]++; if (R[i] == 1) continue; } int di = L[i]-T[i]+N-3, df = R[i]-T[i]+N-3; ans[i] += pdiag[df+1]-pdiag[di]; } } return ans; }
#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...