#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |