Submission #1232658

#TimeUsernameProblemLanguageResultExecution timeMemory
1232658Muhammad_Aneeq모자이크 (IOI24_mosaic)C++20
12 / 100
1098 ms2162688 KiB
#include "mosaic.h" #include <vector> #include <algorithm> #include <set> #include <iostream> using namespace std; set<int>st; void mk(vector<int>x,vector<int>y) { st={}; int n=x.size(); int m=min(6,n); vector<vector<int>>gr(n,vector<int>(m,0)); for (int i=0;i<n;i++) gr[i][0]=y[i]; for (int i=0;i<m;i++) gr[0][i]=x[i]; for (int i=1;i<n;i++) { for (int j=1;j<m;j++) { if (gr[i-1][j]==0&&gr[i][j-1]==0) { gr[i][j]=1; st.insert(j-i); } else gr[i][j]=0; } } gr=vector<vector<int>>(m,vector<int>(n,0)); for (int i=0;i<m;i++) gr[i][0]=y[i]; for (int i=0;i<n;i++) gr[0][i]=x[i]; for (int i=1;i<m;i++) { for (int j=1;j<n;j++) { if (gr[i-1][j]==0&&gr[i][j-1]==0) { gr[i][j]=1; st.insert(j-i); } else gr[i][j]=0; } } } vector<long long> mosaic(vector<int> X, vector<int> Y,vector<int> T, vector<int> B,vector<int> L, vector<int> R) { int q=T.size(); vector<long long>ans; int n=X.size(); int gr[n][n]={}; set<int>s; for (int i=0;i<n;i++) { gr[i][0]=Y[i]; gr[0][i]=X[i]; } for (int i=1;i<n;i++) { for (int j=1;j<n;j++) { if (gr[i-1][j]==0&&gr[i][j-1]==0) gr[i][j]=1; else gr[i][j]=0; if (gr[i][j]==1) s.insert(j-i); } } mk(X,Y); if (st!=s) { exit(-1); } for (int i=0;i<q;i++) { long long sm=0; for (int j=T[i];j<=B[i];j++) { for (int k=L[i];k<=R[i];k++) { sm+=gr[j][k]; } } ans.push_back(sm); } // int prex[n+1]={},prey[n+1]={}; // for (int i=0;i<n;i++) // { // prex[i+1]=prex[i]+X[i]; // prey[i+1]=prey[i]+Y[i]; // } // if (prex[n]==0&&prey[n]==0) // { // for (int i=0;i<q;i++) // { // long long sm=0; // if (T[i]==0) // T[i]++; // if (L[i]==0) // L[i]++; // if (T[i]>B[i]||L[i]>R[i]) // { // ans.push_back(0); // continue; // } // long long len=(R[i]-L[i]+1); // long long len1=(B[i]-T[i]+1); // sm=(len*(len1))/2; // if (len1%2&&len%2) // { // if ((T[i]+L[i])%2==0) // sm++; // } // ans.push_back(sm); // } // return ans; // } // mk(X,Y); // vector<int>segs; // for (auto i:st) // segs.push_back(i); // for (int i=0;i<q;i++) // { // long long sm=0; // for (int j=T[i];j<=B[i];j++) // { // for (int k=L[i];k<=R[i];k++) // { // if (j==0) // sm+=X[k]; // else if (k==0) // sm+=Y[j]; // else if (st.find(k-j)!=st.end()) // sm++; // } // } // ans.push_back(sm); // } 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...