HDOJ5671
1769 ワード
问题を书く时、最も恐れている1种の问题:题意の上で明らかにシミュレーションで、しかしそのデータ量の大きさによって见て、シミュレーションが终わってTLEを肯定します
この問題は、いわゆるシミュレーションを動作ではなく記録し、最終的には変換後に出力するのではなく、記録状況に応じて出力する解決方法を与えた.
コードを読んでみると簡単ですが、このような考え方の変換コードを書くのは難しいです.
a【i】位置上の行変換を示す
b【i】位置上の列変換を示す
c【i】数値上の行変換を表す
d【i】数値上のカラム変換を示す
変換式は問題解で簡単に言えばいい
行列位置変換も行列数値変化も考慮に入れる
この問題は、いわゆるシミュレーションを動作ではなく記録し、最終的には変換後に出力するのではなく、記録状況に応じて出力する解決方法を与えた.
コードを読んでみると簡単ですが、このような考え方の変換コードを書くのは難しいです.
a【i】位置上の行変換を示す
b【i】位置上の列変換を示す
c【i】数値上の行変換を表す
d【i】数値上のカラム変換を示す
変換式は問題解で簡単に言えばいい
行列位置変換も行列数値変化も考慮に入れる
#include<map>
#include<set>
#include<math.h>
#include<time.h>
#include<iostream>
#include<cstdio>
#include<queue>
#include<stack>
#include<stdio.h>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<cstdlib>
using namespace std;
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
#define ll rt<<1
#define rr rt<<1|1
#define LL long long
#define ULL unsigned long long
#define maxn 1050
#define maxnum 1000050
#define eps 1e-6
#define input freopen("input.txt","r",stdin)
#define output freopen("output.txt","w",stdout)
int num[maxn][maxn];
int a[maxn],b[maxn],c[maxn],d[maxn];
int t,n,m,q;
int main(){
//input;
int i,j,x,y;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&q);
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
for(i=1;i<=n;i++) a[i]=i;
for(i=1;i<=m;i++) b[i]=i;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&num[i][j]);
while(q--){
scanf("%d%d%d",&i,&x,&y);
if (i==1) swap(a[x],a[y]);
else if (i==2) swap(b[x],b[y]);
else if (i==3) c[a[x]]+=y;
else d[b[x]]+=y;
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
printf("%d%c",num[a[i]][b[j]]+c[a[i]]+d[b[j]],j==m?'
':' ');
}
return 0;
}