1 条题解
-
1
#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
- 上传者