NOIP模擬 方陣(水題)
阿新 • • 發佈:2018-12-14
【題目描述】
Tom 最近迷上了考古,他發現秦始皇的兵馬俑佈局十分有特點,熱愛鑽研的 Tom 打算在 電腦上還原這個偉大的佈局。
他努力鑽研,發現秦始皇佈置兵馬俑是有一定規律的。兵馬俑陣總共有 n 行 m 列,秦始 皇在佈置的時候每次會指定一行或一列,然後指定一個兵種,使得這一行或者這一列上全 部放上這一個兵種。如果這一行上以前放過其它的兵種,那麼他會拔掉以前的兵種改成現在 他命令的兵種。
Tom 從秦朝的文獻中找到了佈置這個方陣的操作順序,他希望你能告訴他佈局完成後整 個兵馬俑陣是什麼樣子的。
【輸入格式】
輸入檔案共 q+1 行。
輸入檔案第 1 行包括三個正整數 n,m,q,分別表示兵馬俑陣的行數和列數以及秦始皇總的運算元。
接下來 q 行,每行三個正整數,x,y,z,x 表示操作種類,若 x=1 表示給第 y 行(y<=n)全部放上 z 這個兵種,若 x=2,則表示給第 y 列(y<=m)全部放上 z 這個兵種,資料保證z<=2^31-1。
【輸出格式】
輸出檔案共 n 行,每行 m 個整數,分別用空格隔開。表示最後方陣上每個位置放的兵種, 如果某個位置沒有被操作過輸出 0。
【樣例輸入】
3 3 3
1 1 3
2 2 1
1 2 2
【樣例輸出】
3 1 3
2 2 2
0 1 0
【備註】
對於前 20%的資料,n*m<=25。
對於前 30%的資料,q<=2000。
對於 100%的資料,n,m<=1000,n*m<=10^5,q<=10^6。
【題目分析】
大寫的水題。
類似染色問題,我們只用記錄每一行和每一列被染的顏色以及最後染色的時間,最後跑整個圖的時候判斷一下是取行還是取列即可。
【程式碼~】
#include<bits/stdc++.h> using namespace std; typedef long long LL; const LL MAXN=1e3+10; LL Read() { LL i=0,f=1; char c; for(c=getchar();(c>'9'||c<'0')&&c!='-';c=getchar()); if(c=='-') f=-1,c=getchar(); for(;c>='0'&&c<='9';c=getchar()) i=(i<<3)+(i<<1)+c-'0'; return i*f; } void sc(LL x) { if(x>=10) sc(x/10); putchar(x%10+48); } LL n,m,q,tot; struct hl{ LL cz,sx; }hang[MAXN],lie[MAXN]; int main() { n=Read(),m=Read(),q=Read(); while(q--) { LL cz=Read(),x=Read(),y=Read(); if(cz==1) { tot++; hang[x].cz=y; hang[x].sx=tot; } else { tot++; lie[x].cz=y; lie[x].sx=tot; } } for(LL i=1;i<=n;++i) { for(LL j=1;j<=m;++j) { if(hang[i].sx>lie[j].sx) sc(hang[i].cz),putchar(' '); else sc(lie[j].cz),putchar(' '); } puts(""); } return 0; }