變態比賽規則

來源:互聯網
上載者:User
變態比賽規則
為了促進各部門員工的交流,百度舉辦了一場全公司範圍內的“拳皇”(百度內部最流行的格鬥遊戲)友誼賽,負責組織這場比賽的是百度的超級“拳皇”迷W.Z。W.Z不想用傳統的淘汰賽或者迴圈賽的方式,而是自己制定了一個比賽規則。
由於一些員工(比如同部門或者相鄰部門員工)平時接觸的機會比較多,為了促進不同部門之間的交流,W.Z希望員工自由分組。不同組之間的每兩個人都會進行一場友誼賽而同一組內的人之間不會打任何比賽。

比如4個人,編號為1~4,如果分為兩個組並且1,2一個組,3,4一個組,那麼一共需要打四場比賽:1 vs 3,1 vs 4,2 vs 3,2 vs 4。 而如果是1,2,3一組,4單獨一組,那麼一共需要打三場比賽: 1 vs 4,2 vs 4,3 vs 4。

很快 W.Z意識到,這樣的比賽規則可能會讓比賽的場數非常多。W.Z想知道如果有N個人,通過上面這種比賽規則,總比賽場數有可能為K場嗎?比如3個人,如果只分到一組則不需要比賽,如果分到兩組則需要2場比賽,如果分為三組則需要3場比賽。但是無論怎麼分都不可能恰需要1場比賽。

 

#include <stdio.h>

int main(int argc, char *argv[])
{
    int n, k;
   
    if( argc!=3 )
    {
        printf("use: %s n k", argv[0]);
        return -1;
    }
   
    n = atoi(argv[1]);
    k = atoi(argv[2]);
   
    if(foo(n, k)>0)
        printf("YES/n");
    else
        printf("NO/n");
   
    return 0;
}

int maxT(int n, int m)
{
    if( n<=0 || n>500 || m<=0 )
        return -1;
    if( m==1 )
        return n*(n-1)/2;
    if( m>=n || n==1 )
        return 0;
    return m*(n-m)+(n-m)*(n-m-1)/2;
}

int minT(int n, int m)
{
    if( n<=0 || n>500 || m<=0 )
        return -1;
    if( m==1 )
        return n*(n-1)/2;
    if( m>=n || n==1 )
        return 0;
    return m*(n-m)+minT(n-m, m);
}

int foo(int n, int k)
{
    int max, min;
    int m;

    if( n<=0 || n>500 || k<0 || k>n*(n-1)/2 )
        return -1;

    if( k==0 || k==n-1)
        return 1;

    if( n==1 || k<n-1 )
        return -1;

    for( m=n; m>0; m-- )
    {
         max = maxT(n, m);
         min = minT(n, m);
         if( k<=max && k>=min )
         {
             if( foo(n-m, k-m*(n-m))>0 )
                 return 1;
         }
    }
    return -1;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.