同色三角形 (數學題)
阿新 • • 發佈:2019-01-22
題目
有 n 個點的完全圖,對邊染色,共 m 種顏色。問是否一定出現同色三角形。
m<=10^6
,n<=2^63-1
,多組資料
in | out |
---|---|
5 2 6 2 |
NO YES |
分析
- 有一個經典的同色三角形問題,是這題簡化版:6個點2種顏色,必有同色三角形。
百度上的證明是這樣的
- 優質解答
從任意一點,例如點A出發,向B,C,D,E,F連5條線段,因為只有兩種顏色,所以根據抽屜原理,至少有3條線段同色.不妨設AB,AD,AE三線同紅色.如果B,D,E這三點之間所連的三條線段中有一條是紅色的,則出現一個三邊為紅色的三角形.如果這三點之間所連線段都不是紅色,那麼就都是黃色的,這樣,△BDE就是一個黃色的三角形.因此,不管如何連線,總可以找到一個三邊同色的三角形.
問題得證.
- 優質解答
類比一下,在 n 個點中選任意一點,那麼根據抽屜原理,至少有
((n-1)/m)+((n-1)%m!=0)
(這裡將這個數暫且設成 k) 條接出的線段同色(也就是 (n-1)/m 上取整),設顏色是 m1 ,然後對於這 k 條邊對應的點的點(不算原來選的那個),它們之間的邊就不能再有m1,於是就變成了個 “(k個點,(m-1)種顏色)”的子問題了。- 一直這麼弄下去,直到
m=1
,此時在判斷剩下幾個點,小於三個就不一定,否則一定有同色三角形。
程式
#include <cstdio>
int main(){
for(long long n,m; scanf("%lld%lld" ,&n,&m)!=EOF; ){
for (; m>1; m--)
n=((n-1)/m)+((n-1)%m!=0);
printf(n>=3?"YES\n":"Not Sure\n");
}
}