程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POI2000 Stripes -------SG

POI2000 Stripes -------SG

編輯:C++入門知識

Stripes
Time Limit:1000MSMemory Limit:30000KB
Total Submit:71Accepted:31
Description

  Stripes is a two player game. Necessary requisites are a board and rectangular stripes in three colours: red, green and blue. All the red stripes have dimensions c x 1, green - z x 1, and blue - n x 1, where c, z and n are integers. Players have at their disposal an unlimited pool of stripes of each colour.

A game board is a rectangle of dimensions p x 1 and consists of p fields of size 1 x 1.

Players make their moves by turns. Move consists of laying a stripe of any colour on the board. There are the following rules in force:

A stripe cannot stick out of the board,
The covering (even partially) the earlier laid stripes is forbidden.
The ends of a stripe have to adhere to the edges of the fields on the board. The player, who is not able to perform his move in accordance to the game rules first, loses.
The first player is this one, who makes the first move in the game. It is said, that the first player has a winning strategy, if independently of the moves of the second player he can always win.

Task
Write a program, which:

1.reads sizes of stripes and of at least one board
2.for each board determines, whether the first player has a winning strategy,
3.writes the results.
Input

The first line of the input consists of three integers c, z and n, 1 <= c, z, n <= 1000, equal to the lengths of stripes, adequately: red, green and blue ones. Numbers in the line are separated by single spaces.

The second line of the file PAS.IN consists of one number m, 1 <= m <= 1000, which is equal to the number of different boards to consider. Lines from the 3-rd to the (m+2)-th consists of one number p, 1 <= p < 1000. Number in the (i+2)-th line is the length of the i-th board.

Output

  The output should contain m lines. Only one number should be written in the i-th line of the file:

1 - if the first player has a winning strategy on the i-th board
2 - otherwise. 
Sample Input

1 5 1
3
1
5
6
Sample Output

1
1
2
Source
POI 2000 I Stage
 
題目鏈接地址:http://www.acm.cs.ecnu.edu.cn/problem.php?problemid=1328
題意:其實就是給你L顆石子,你可以取連續的C顆石子,或者連續的Z顆石子,或者連續的N顆石子,誰不能取了,誰就輸了,問甲乙兩人誰有必勝策略。
其實這題就是SG的化身。
[cpp]
#include<iostream> 
#include<cstdlib> 
#include<stdio.h> 
#include<memory.h> 
using namespace std; 
int color[3]; 
int dp[1010]; 
void init() 

    for(int i=0;i<=1000;i++) 
    { 
        bool g[1010]={0}; 
        for(int j=0;j<3;j++) 
        for(int k=color[j];k<=i;k++) 
        { 
            int t=dp[k-color[j]]^dp[i-k]; 
            g[t]=1; 
        } 
        for(int j=0;j<=1000;j++) 
        if(!g[j]) 
        {dp[i]=j;break;} 
    } 
 

int main() 

    while(scanf("%d",&color[0])!=EOF) 
    { 
        for(int i=1;i<3;i++) 
        scanf("%d",&color[i]); 
        memset(dp,0,sizeof(dp)); 
        init(); 
        int t; 
        scanf("%d",&t); 
        while(t--) 
        { 
            int n; 
            scanf("%d",&n); 
            if(dp[n]==0) puts("2"); 
            else  puts("1"); 
        } 
    } 


作者:qiqijianglu

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved