Submission #1191080

#TimeUsernameProblemLanguageResultExecution timeMemory
1191080cpdreamerMosaic (IOI24_mosaic)C++20
22 / 100
1094 ms17720 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const long double EPS = 1e-9;
void file(){
    freopen("input.txt.txt","r",stdin);
    freopen("output.txt.txt","w",stdout);
}
#define V vector
#define pb push_back
#define P pair
#define S second
#define F first
#define all(v) v.begin(),v.end()
int ask(int i,int j){
    cout<<"? "<<i<<" "<<j<<endl;
    cout.flush();
    int a;
    cin>>a;
    return a;
}
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=(int )X.size();
    int q=(int)T.size();
    V<V<int>>col(3, V<int>(n)),row(3, V<int>(n));
    col[0]=Y;
    row[0]=X;
    for(int i=1;i<3;i++){
        col[i][0]=X[i];
        for(int j=1;j<n;j++){
            if(col[i-1][j]==0 && col[i][j-1]==0){
                col[i][j]=1;
            }
            else
                col[i][j]=0;
        }
    }
    for(int i=1;i<3;i++){
        row[i][0]=Y[i];
        for(int j=1;j<n;j++){
            if(row[i-1][j]==0 && row[i][j-1]==0){
                row[i][j]=1;
            }
            else
                row[i][j]=0;
        }
    }
    V<ll>ans;
    for(int i=0;i<q;i++){
        int t=T[i],l=L[i],r=R[i];
        ll c=0;
        if(t==0 || t==1 || t==2){
            for(int j=l;j<=r;j++){
               c+=row[t][j];
            }
            ans.pb(c);
            continue;
        }
        if(l==0){
            c+=col[l][t];
            l++;
        }
        if(l>r){
            ans.pb(c);
            continue;
        }
        if(l==1){
            c+=col[l][t];
            l++;
        }
        if(l>r){
            ans.pb(c);
            continue;
        }
        int mind=min(l-2,t-2);
        l-=mind,t-=mind,r-=mind;
        while(l<=r && t>2){
            c+=col[2][t];
            r--;
            t--;
        }
        for(int j=l;j<=r;j++){
            c+=row[2][j];
        }
        ans.pb(c);
    }
    return ans;
}

Compilation message (stderr)

mosaic.cpp: In function 'void file()':
mosaic.cpp:6:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    6 |     freopen("input.txt.txt","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
mosaic.cpp:7:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    7 |     freopen("output.txt.txt","w",stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...