Submission #1256318

#TimeUsernameProblemLanguageResultExecution timeMemory
1256318trandangquangJOIRIS (JOI16_joiris)C++20
100 / 100
1 ms328 KiB
#include<bits/stdc++.h>
using namespace std;

#define foru(i,a,b) for(int i=(a); i<=(b); ++i)
#define ford(i,a,b) for(int i=(a); i>=(b); --i)
#define ii pair<int,int>

int n,k,a[55],p[55];
int md=-1;
vector<ii> ans;

bool can(int x){
    foru(i,1,n) p[i]=0;
    foru(i,1,n-k+1){
        p[i]+=p[i-1];
        int d=((x-(a[i]+p[i]))%k+k)%k;
        p[i]+=d; p[i+k]-=d;
    }
    foru(i,n-k+2,n) p[i]+=p[i-1];
    foru(i,1,n){
        if((a[i]+p[i])%k!=x){
            return false;
        }
    }
    return true;
}
void chk(){
    foru(i,0,k-1){
        if(can(i)){
            md=i;
            return;
        }
    }
}
void put(int dir, int x){ /// dir=1: vertical, dir=2: horizontal
    ans.emplace_back(dir,x);
}

void solve(){
    cin>>n>>k;
    foru(i,1,n) cin>>a[i];

    chk();

    if(md==-1){
        cout<<"-1\n";
        return;
    }

    foru(i,1,n) p[i]=0;
    foru(i,1,n-k+1){
        int d=((md-a[i])%k+k)%k;
        foru(j,1,d) put(2,i);

        int mx=0;
        foru(j,i,i+k-1) a[j]+=d, mx=max(mx,a[j]);

        foru(j,1,n) if(j<=i-1 || j>=i+k){
            while(a[j]<mx){
                a[j]+=k;
                put(1,j);
            }
        }
    }

    int mx=*max_element(a+1,a+1+n);
    foru(i,1,n){
        while(a[i]<mx){
            a[i]+=k;
            put(1,i);
        }
    }

    cout<<ans.size()<<'\n';
    for(auto [x,y]:ans) cout<<x<<" "<<y<<'\n';
}

int main(){
    #define task "test"
    if(fopen(task".inp","r")){
        freopen(task".inp","r",stdin);
        freopen(task".out","w",stdout);
    }
    cin.tie(0)->sync_with_stdio(0);

    int tc=1; //cin>>tc;
    foru(_,1,tc){
        solve();
    }
}

Compilation message (stderr)

joiris.cpp: In function 'int main()':
joiris.cpp:81:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   81 |         freopen(task".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
joiris.cpp:82:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   82 |         freopen(task".out","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...