1. 程式人生 > >2月4日考試——歡樂鬥地主

2月4日考試——歡樂鬥地主

就是 數據 print lin 代碼 -- else esp 。。

                歡樂鬥地主
                 時限:1s
               內存限制:128MB
題目描述:
  Ning_Mew 最近有玩歡樂鬥地主(不能歧視我菜),腦子再次一熱,就改成了一道很水很水的題。
小 Mew 和朋友小 Ning 一起玩遊戲,兩個人輪流取紙牌,告訴你一共有 n 張紙牌,每次可以取 1~m 張,每
次小 Mew 都可以先手(誰要他巨呢),假設兩個人都是高智商,都只會去取最有可能贏的數量的牌。所以呢想要
問你,小 Mew 第一次要取多少張牌才能穩贏~實在穩贏不了,就輸出“She Pi Guai Wu!”(不包括引號)


贏的定義就是取最後一張。_(:3 / )_
讀入格式:
第一行:q(表示讀入 q 行 n 與 m)----->多測
第二至 q+1 行:每行讀入 n,m
輸出格式:
第一至 q 行:每行,如果能穩贏,輸出第一次取的紙牌數量;否則,輸出“She Pi Guai Wu!”(不包括引號)。
樣例輸入:
1
42
樣例輸出:
1
樣例解釋:
這還要解釋?
數據範圍:
10%: q<=10
n,m<=100
40%: q<=100
n,m<=1000
60%: q<=1000
n,m<=10000
80%: q<=10000
n,m<=10000
100%: q<=100000 n,m<=1000000

Solution:

  

本題考察數學,實際上是小學奧數的推廣。大家應該都還記得小學奧數中經典的分紙牌的遊戲吧,就是給出54張牌,一次能拿1到4張牌,問先手第一次拿幾張牌能贏。。。答案是先手拿4張牌,這樣剩下50張牌,無論對手拿x張,我拿5-x張,最後一張牌一定是先手拿到。。。推及到本題,有n張牌,每次最多拿m張,那麽若n%(m+1)==0,則先手必輸(因為無論先手拿x張,後手都能拿到m+1-x張),若n%(m+1)!=0,則先手必贏,策略是先拿n%(m+1)張牌。

代碼:

 1 /*小學奧數中的分紙牌問題,開始還以為是nim遊戲,打了個dp但數據呵呵——by 520*/
 2 #include<bits/stdc++.h>
 3
#define il inline 4 #define ll long long 5 using namespace std; 6 int n,m,q; 7 il int gi() 8 { 9 int a=0;char x=getchar();bool f=0; 10 while((x<0||x>9)&&x!=-)x=getchar(); 11 if(x==-)x=getchar(),f=1; 12 while(x>=0&&x<=9)a=a*10+x-48,x=getchar(); 13 return f?-a:a; 14 } 15 int main() 16 { 17 freopen("card.in","r",stdin); 18 freopen("card.out","w",stdout); 19 q=gi(); 20 while(q--){ 21 n=gi(),m=gi(); 22 if(n%(m+1))printf("%d\n",n%(m+1)); 23 else printf("She Pi Guai Wu!\n"); 24 } 25 return 0; 26 }

2月4日考試——歡樂鬥地主