題意:給你一張大小為2k * 2k 的地圖,你要用4種地毯去填充這張地圖,規定有乙個點不能填,每個格仔只能被一張地毯覆蓋,讓你輸出覆蓋方案。(方案為第i種地毯在點(x,y)處拐角)
地毯樣式:
如果在乙個2 * 2的地圖裡,我們顯然直接用一種給它補全就行。
如果在乙個4 * 4的地圖裡,我們完成以下操作後,需要補全其他部分。
假如我們把2 * 2看做乙個整體,每個小整體分別還能放下乙個地毯,但是每個小整體都會多出乙個小塊來,我們就讓這三個小塊形成一塊地毯,這樣就行了。
然後由小到大,這個問題就解決了。
**:
#include
#pragma gcc optimize("ofast")
#define endl '\n'
#define null null
#define ls p<<1
#define rs p<<1|1
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll long long
//#define int long long
#define pii pair
#define ull unsigned long long
#define all(x) x.begin(),x.end()
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ct cerr<
char
*fs,
*ft,buf[
1<<20]
;#define gc() (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<20,stdin),fs==ft))?0:*fs++;
inline
intread()
while
(ch>=
'0'&&ch<=
'9')
return x*f;
}using
namespace std;
const
int n=
1e5+5;
const
int inf=
0x3f3f3f3f
;const
int mod=
9901
;const
double eps=
1e-7
;const
double pi=
acos(-
1);void
dfs(
int k,
int x,
int y,
int mx,
int my)
int d=
pow(
2,k-1)
;if(x<=mx+d-
1&& y<=my+d-1)
else
if(x<=mx+d-
1&& y>my+d-1)
else
if(x>mx+d-
1&& y<=my+d-1)
else
if(x>mx+d-
1&& y>my+d-1)
}signed
main()
P1228 地毯填補問題(遞迴 分治)
p1228 地毯填補問題 其實這道題目一點也不會寫,光看懂別人的解題思路就花了好長時間。那現在我來說說我對這個題目的理解。1.所謂拐點就是每種毯子,中間的那塊,也就是那個點的座標。2.可以發現當格仔22時,必有一種填充方式。3.由2引申,我們可以把迷宮全部分成22,也就是遞迴結束的標誌。includ...
P3397 地毯 差分
題目背景 此題約為noip提高組day2t1難度。題目描述 在 n nn times nn n 的格仔上有 mmm 個地毯。給出這些地毯的資訊,問每個點被多少個地毯覆蓋。輸入格式 第一行,兩個正整數 n,mn,mn,m。意義如題所述。接下來 mmm 行,每行兩個座標 x1,y1 x 1,y 1 x1...
洛谷 P3397 地毯
此題約為noip提高組day2t1難度。在n n的格仔上有m個地毯。給出這些地毯的資訊,問每個點被多少個地毯覆蓋。輸入格式 第一行,兩個正整數n m。意義如題所述。接下來m行,每行兩個座標 x1,y1 和 x2,y2 代表一塊地毯,左上角是 x1,y1 右下角是 x2,y2 輸出格式 輸出n行,每行...