题解:P12549 [UOI 2025] Gift for Anton

· · 题解

思路

这道题说是可以用 3 4,但是这两个数却并不能使用。因为不能只使用这两个数字中的一种拼成一个合法的礼物。

所以尝试构造出一个合法的单位并且可以作为一个小单元的方格。不难找出这种情况。

当行列有不是 3 的倍数时

## 代码 这道题的代码简直是又臭又长 ```cpp #include<bits/stdc++.h> using namespace std; const int N=205; int n,m,xn,xm; int dt[205]; int gz[5][5]; int main(){ cin>>n>>m; gz[1][1]=gz[1][2]=gz[2][1]=gz[2][2]=2; gz[1][3]=gz[2][3]=gz[3][1]=gz[3][2]=1; gz[3][3]=0; if(n==1&&m==1){ cout<<"0\n"; return 0; } if(n<3){ if(n==1){ if(m%3==0){ for(int i=1;i<=m;i++){ cout<<gz[3][(i+3+m%3-1)%3+1]<<" "; } } if(m%3==1){ for(int i=1;i<=m;i++){ cout<<gz[3][(i+3+m%3)%3+1]<<" "; } } if(m%3==2){ for(int i=1;i<=m;i++){ cout<<gz[3][(i+3+m%3)%3+1]<<" "; } } } if(n==2){ if(m%3==0){ for(int i=1;i<=m;i++){ cout<<gz[1][(i+3+m%3-1)%3+1]<<" "; } cout<<"\n"; for(int i=1;i<=m;i++){ cout<<gz[1][(i+3+m%3-1)%3+1]<<" "; } } if(m%3==1){ for(int i=1;i<=m;i++){ cout<<gz[1][(i+3+m%3)%3+1]<<" "; } cout<<"\n"; for(int i=1;i<=m;i++){ cout<<gz[1][(i+3+m%3)%3+1]<<" "; } } if(m%3==2){ for(int i=1;i<=m;i++){ cout<<gz[1][(i+3+m%3)%3+1]<<" "; } cout<<"\n"; for(int i=1;i<=m;i++){ cout<<gz[1][(i+3+m%3)%3+1]<<" "; } } } return 0; } if(m<3){ if(m==1){ if(n%3==0){ for(int i=1;i<=n;i++){ cout<<gz[3][(i+3+n%3-1)%3+1]<<"\n"; } } if(n%3==1){ for(int i=1;i<=n;i++){ cout<<gz[3][(i+3+n%3)%3+1]<<"\n"; } } if(n%3==2){ for(int i=1;i<=n;i++){ cout<<gz[3][(i+3+n%3)%3+1]<<"\n"; } } } if(m==2){ if(n%3==0){ for(int i=1;i<=n;i++){ cout<<gz[1][(i+3+n%3+1)%3+1]<<" "<<gz[1][(i+3+n%3+1)%3+1]<<"\n"; } } if(n%3==1){ for(int i=1;i<=n;i++){ cout<<gz[1][(i+3+n%3)%3+1]<<" "<<gz[1][(i+3+n%3)%3+1]<<"\n"; } } if(n%3==2){ for(int i=1;i<=n;i++){ cout<<gz[1][(i+3+n%3)%3+1]<<" "<<gz[1][(i+3+n%3)%3+1]<<"\n"; } } } return 0; } if(n%3==0){ if(m%3==0){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cout<<gz[(i-1)%3+1][(j-1)%3+1]<<" "; } cout<<"\n"; } } if(m%3==1){ for(int i=1;i<=n;i++){ for(int j=1;j<=m-1;j++){ if(j==1) cout<<gz[3][(i-1)%3+1]<<" "; cout<<gz[(i-1)%3+1][(j-1)%3+1]<<" "; } cout<<"\n"; } } if(m%3==2){ for(int i=1;i<=n;i++){ for(int j=1;j<=m-2;j++){ cout<<gz[(i-1)%3+1][(j-1)%3+1]<<" "; if(j==m-2) cout<<gz[1][(i-1)%3+1]<<" "<<gz[1][(i-1)%3+1]; } cout<<"\n"; } } } if(n%3==1){ if(m%3==0){ for(int i=1;i<=m;i++){ cout<<gz[3][(i-1)%3+1]<<" "; }cout<<"\n"; for(int i=1;i<=n-1;i++){ for(int j=1;j<=m;j++){ cout<<gz[(i-1)%3+1][(j-1)%3+1]<<" "; } cout<<"\n"; } } if(m%3==1){ for(int i=1;i<=m-1;i++){ if(i==1) cout<<gz[3][(i+1)%3+1]<<" "; cout<<gz[3][(i-1)%3+1]<<" "; }cout<<"\n"; for(int i=1;i<=n-1;i++){ for(int j=1;j<=m-1;j++){ if(j==1) cout<<gz[3][(i-1)%3+1]<<" "; cout<<gz[(i-1)%3+1][(j-1)%3+1]<<" "; } cout<<"\n"; } } if(m%3==2){ for(int i=1;i<=m-2;i++){ cout<<gz[3][(i-1)%3+1]<<" "; if(i==m-2) cout<<gz[1][(i-1)%3+1]<<" "<<gz[1][(i-1)%3+1]; }cout<<"\n"; for(int i=1;i<=n-1;i++){ for(int j=1;j<=m-2;j++){ cout<<gz[(i-1)%3+1][(j-1)%3+1]<<" "; if(j==m-2) cout<<gz[1][(i-1)%3+1]<<" "<<gz[1][(i-1)%3+1]; } cout<<"\n"; } } } if(n%3==2){ if(m%3==0){ for(int i=1;i<=n-2;i++){ for(int j=1;j<=m;j++){ cout<<gz[(i-1)%3+1][(j-1)%3+1]<<" "; } cout<<"\n"; } for(int i=1;i<=m;i++){ cout<<gz[1][(i-1)%3+1]<<" "; }cout<<"\n"; for(int i=1;i<=m;i++){ cout<<gz[2][(i-1)%3+1]<<" "; }cout<<"\n"; } if(m%3==1){ for(int i=1;i<=n-2;i++){ for(int j=1;j<=m-1;j++){ if(j==1) cout<<gz[3][(i-1)%3+1]<<" "; cout<<gz[(i-1)%3+1][(j-1)%3+1]<<" "; } cout<<"\n"; } for(int i=1;i<=m-1;i++){ if(i==1) cout<<gz[3][(i-1)%3+1]<<" "; cout<<gz[1][(i-1)%3+1]<<" "; }cout<<"\n"; for(int i=1;i<=m-1;i++){ if(i==1) cout<<gz[3][(i-1)%3+1]<<" "; cout<<gz[2][(i-1)%3+1]<<" "; }cout<<"\n"; } if(m%3==2){ for(int i=1;i<=n-2;i++){ for(int j=1;j<=m-2;j++){ cout<<gz[(i-1)%3+1][(j-1)%3+1]<<" "; if(j==m-2) cout<<gz[1][(i-1)%3+1]<<" "<<gz[1][(i-1)%3+1]; } cout<<"\n"; } for(int i=1;i<=m-2;i++){ cout<<gz[1][(i-1)%3+1]<<" "; if(i==m-2) cout<<gz[1][(i+1)%3+1]<<" "<<gz[1][(i+1)%3+1]; }cout<<"\n"; for(int i=1;i<=m-2;i++){ cout<<gz[2][(i-1)%3+1]<<" "; if(i==m-2) cout<<gz[1][(i+1)%3+1]<<" "<<gz[1][(i+1)%3+1]; }cout<<"\n"; } } } ```