1 条题解

  • 1
    @ 2025-10-26 16:20:15
    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;	// 严格要求
    struct paper{
    	ll x1, y1, x2, y2, p, xt, yt;
    }pa[1000100];	//贴纸的要求 
    bool cmp(paper x, paper y){
    	return x.p < y.p;
    }
    ll a[1010][1010];	//图案纸 
    ll b[1010][1010];	//画纸 
    int main(){
    	ios :: sync_with_stdio(0);	// 提高cin、cout的运行速度
    	
    	ll n, m, c, k;
    	cin >> n >> m >> c >> k;	//画纸的行数和列数、图案纸的边长,以及贴纸的数量
    	
    	for(ll i = 1; i <= k; i++){	//贴纸的相关信息 
    		cin >> pa[i].x1 >> pa[i].y1 >> pa[i].x2 >> pa[i].y2 >> pa[i].p >> pa[i].xt >> pa[i].yt;
    	}
    	
    	for(ll i = 1; i <= c; i++){
    		for(ll j = 1; j <= c; j++){
    			cin >> a[i][j];		//输入图案纸 
    		}
    	}
    	
    	sort(pa + 1, pa + k + 1, cmp);		//贴纸根据重要性排序 
    	
    	//开始覆盖画纸张 
    	for(ll i = 1; i <= n; i++){
    		for(ll j = 1; j <= m; j++){
    			b[i][j] = -1;
    		}
    	}
    	
    	//结构体测试没问题 
    //	for(ll i = 1; i <= k; i++){	//贴纸的相关信息 
    //		cout << pa[i].x1 << pa[i].y1 << pa[i].x2 << pa[i].y2 << pa[i].p << pa[i].xt << pa[i].yt;
    //	}
    	
    	for(ll i = 1; i <= k; i++){		//k张 
    		
    		for(ll l = pa[i].x1; l <= pa[i].x2; l++){	//画纸覆盖的范围 
    			for(ll r = pa[i].y1; r <= pa[i].y2; r++){
    				ll sum1 = l - pa[i].x1;	//行的偏移
    				ll sum2 = r - pa[i].y1;	//列的偏移 
    				b[l][r] = a[pa[i].xt + sum1][pa[i].yt + sum2];	//实现图案纸覆盖画纸 
    			}
    			
    		}
    		
    	}
    	
    	for(ll i = 1; i <= n; i++){			//输出 
    		for(ll j = 1; j <= m; j++){
    			cout << b[i][j] << " ";		
    		}
    		cout << endl;
    	}
    
        return 0;
    }
    
    
    

    信息

    ID
    3313
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    9
    已通过
    3
    上传者