TopCoder

User's AC Ratio

90.2% (55/61)

Submission's AC Ratio

25.5% (107/419)

Tags

Description

有三堆石頭,個數分別為 $a$ 個、$b$ 個、$c$ 個,由二人輪流取石頭,取的時候只能從其中一堆取,至少取一個,至多取全部,如此玩到最後一堆,拿完最後一個的人獲勝。請設計一程式讓電腦與 Judge 端程式對玩,由你的程式扮演先手的角色,並獲得勝利。

本題為互動題,請引入"lib1088.h"

可以使用的函式:


  • void Initialize(int *a,int *b,int *c):初始化三堆石頭,並且得到三堆石頭的個數(儲存於*a,*b,*c中),請務必在開始拿石頭之前呼叫它。

  • void Take_Stone(int pile_no, int num, int *com_pile, int *com_num):從第pile_no(只能是1,2或3)堆拿取num個石頭,接著輪到電腦取石頭,電腦取石頭的動作會儲存於*com_pile 以及 *com_num 當中,分別代表第幾堆以及拿幾個。你可以假設電腦的取石頭動作都是合法的。


你不能在同一堆拿取過多的石頭,否則不可能 AC。
當你拿走最後一顆石頭時,Judge 會自動結束你的程式。

Input Format

本題沒有 Input。請不要從螢幕或檔案輸入任何東西。

※一些限制:$0\le a,b,c\le 10^ 6$

在合理的狀況之下不必擔心電腦取石頭導致超過限制時間的問題。

Output Format

本題沒有 Output。

Hints

一個不保證 AC 的範例程式:

#include "lib1088.h"

int main(void)
{
 int MyPile[3]={0},running=1,i,j,k;
 Initialize(&MyPile[0],&MyPile[1],&MyPile[2]);
 while(running)
 {
  for(i=0;i<3;i++)
   if(MyPile[i]>0)
   {
    Take_Stone(i+1,MyPile[i],&j,&k);
    MyPile[j-1]-=k;
   }
 }
 return 0;
}


Problem Source

原TIOJ1088 / 94建中校內資訊能力競賽(prob 5 BONUS)

Subtasks

No. Testdata Range Score
1 0 16
2 1 16
3 2 16
4 3 16
5 4 16
6 5 20

Testdata and Limits

No. Time Limit (ms) Memory Limit (VSS, KiB) Output Limit (KiB) Subtasks
0 3000 65536 262144 1
1 3000 65536 262144 2
2 3000 65536 262144 3
3 3000 65536 262144 4
4 3000 65536 262144 5
5 3000 65536 262144 6