1. 程式人生 > >同色三角形 (數學題)

同色三角形 (數學題)

題目

有 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"); } }