1. 程式人生 > >NOIP模擬 方陣(水題)

NOIP模擬 方陣(水題)

【題目描述】

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;
}