1 条题解

  • 0
    @ 2025-8-24 23:16:24

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Eden_star
    原uid:306647306||QQ:1643566903||魔↑术↓技↑巧↓||無駄

    搬运于2025-08-24 23:16:24,当前版本为作者最后更新于2025-05-21 16:58:56,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    思路

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

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

    pExhvrR.png

    当行列有不是 33 的倍数时

    • NN 取余三等于 11 时以下图的格式进行插入
      pEx4fJO.png
    • NN 取余三等于 22 时以下图的格式进行插入
      pEx4oyd.png

    MM 的情况就是把 NN 的情况竖过来。

    代码

    这道题的代码简直是又臭又长

    #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";
    		}
    	}
    }
    
    • 1

    信息

    ID
    12316
    时间
    500ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者