HDU 5762 Teacher Bo(鴿巢定理)

2021-07-16 08:08:49 字數 1010 閱讀 5974

description

給出n個整點的座標,問是否存在點a,b,c,d(a< b,c< d,a!=c or b!=d)使得ab之間曼哈頓距離等於cd之間曼哈頓距離

input

第一行一整數t表示用例組數,每組用例首先輸入兩個整數n和m表示點數以及點座標絕對值上限,之後n行每行輸入兩個非負整數xi,yi(n,m<=10^5,0<=xi,yi<=m)

output

對於每組用例,如果存在滿足條件的(a,b,c,d)則輸出yes,否則輸出no

sample input

2 3 10

1 1

2 2

3 3

4 10

8 8

2 3

3 3

4 4

sample output

yes

nosolution

兩點之間曼哈頓距離必然介於[0,2m]之間,由鴿巢定理,超過2m個曼哈頓距離中必然出現重複,所以直接列舉兩點之間曼哈頓距離並標記,如果某個距離已經被標記則存在重複,時間複雜度o(min(n^2,m))<=o(2*10^5)

code

#include

#include

#include

#include

using

namespace

std;

#define maxn 111111

int t,n,m,x[maxn],y[maxn],mark[2*maxn];

int main()

}if(flag)break;

}printf("%s\n",flag?"yes":"no");

}return

0;}

hdu 1205 鴿巢原理

運用鴿巢原理,假設最多的糖果有 個,那麼必須要有max 1個其他種類的糖果才能吃完,如果其他種類的糖果多於max 1個,那麼至少要有乙個種糖果存在max 1個,才會出現當前狀態無解,而這種狀況下又與最多糖果數為max矛盾,所以要滿足有解的充要條件是max 1 sum max include incl...

HDU 1205(鴿巢原理)

hoho,終於從speakless手上贏走了所有的糖果,是gardon吃糖果時有個特殊的癖好,就是不喜歡將一樣的糖果放在一起吃,喜歡先吃一種,下一次吃另一種,這樣 可是gardon不知道是否存在一種吃糖果的順序使得他能把所有糖果都吃完?請你寫個程式幫忙計算一下。input 第一行有乙個整數t,接下來...

hdu 1205 吃糖果(鴿巢原理)

鴿巢原理 1.把某種糖果看做隔板,如果某種糖果有n個,那麼就有n 1塊區域,至少需要n 1塊其他種糖果才能使得所有隔板不挨在一塊.也就是說能吃完這種糖果.至少需要其他種類糖果n 1塊.鴿巢原理 2.數量最多的糖果 隔板 可以構造最多的空間,如果這種糖果有maxn個.那麼需要maxn 1個其他種糖果....