Submission #1244413

#TimeUsernameProblemLanguageResultExecution timeMemory
1244413MarwenElarbiMosaic (IOI24_mosaic)C++20
48 / 100
86 ms21456 KiB
#include "mosaic.h" #include <bits/stdc++.h> using namespace std; std::vector<long long> mosaic(std::vector<int> X, std::vector<int> Y, std::vector<int> T, std::vector<int> B, std::vector<int> L, std::vector<int> R) { int n = X.size(); int q = T.size(); bool x[4][n]; bool y[n][4]; for (int i = 0; i < n; ++i) { x[0][i]=X[i]; y[i][0]=Y[i]; } for (int i = 0; i < 4; ++i) { x[i][0]=Y[i]; y[0][i]=X[i]; } for (int i = 1; i < 4; ++i) { for (int j = 1; j < n; ++j) { if(x[i-1][j]+x[i][j-1]==0) x[i][j]=1; else x[i][j]=0; } } for (int i = 1; i < n; ++i) { for (int j = 1; j < 4; ++j) { if(y[i-1][j]+y[i][j-1]==0) y[i][j]=1; else y[i][j]=0; } } int prefx[4][n]; int prefy[n][4]; for (int i = 0; i < 4; ++i) { for (int j = 0; j < n; ++j) { prefx[i][j]=x[i][j]; if(j) prefx[i][j]+=prefx[i][j-1]; } } for (int i = 0; i < n; ++i) { for (int j = 0; j < 4; ++j) { prefy[i][j]=y[i][j]; if(j) prefy[i][j]+=prefy[i][j-1]; } } vector<long long> ans; int pre[n]; for (int i = 0; i < n; ++i) { pre[i]=y[i][3]; if(i) pre[i]+=pre[i-1]; } for (int k = 0; k < q; ++k) { int t=T[k]; int i=L[k]; int j=R[k]; if(t<=3) ans.push_back(prefx[t][j]-(i ? prefx[t][i-1] : 0)); else if (j<=3) ans.push_back(prefy[t][j]-(i ? prefy[t][i-1] : 0)); else{ int cur = 0; int up = t - 3; if(i<=3){ cur+=prefy[t][3]-(i ? prefy[t][i-1] : 0); i=4; } if(j-up>=3&&i-up>=3) cur+=prefx[3][j-up]-prefx[3][i-up-1]; else if(j-up>=3){ cur+=prefx[3][j-up]-prefx[3][3]; cur+=pre[t-(i-3)]-pre[2]; } else{ cur-=pre[t-(j-2)]; cur+=pre[t-(i-3)]; } ans.push_back(cur); } } 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...