Apple。好题!ACdream群赛

来源:互联网 发布:抽象工厂java 编辑:程序博客网 时间:2024/06/06 19:03

题目链接:http://acdream.info/problem?pid=1131

题意:状态:有n个篮子和m个苹果,他们每一个都是不同的。然后给出一个数A,有A,B两个人轮流进行操作,每次只能增加1个篮子或者1个苹果,操作完之后如果这m个苹果放到n个篮子的方式(设为k),篮子可以为空,如果这个k不小于A的值的话,就算这个人输了。当然这两个人都是聪明人,都会尽力不会让自己输。

输出结果Alice是赢还是输或者平局。win,lose,draw.

解题思路:刚开始看题目Alice和bob还以为是博弈论,纠结一会,后来慢慢发现了点什么。首先我们得知道m个不同的苹果放到n个不同的篮子有多少种方法。每个苹果放进篮子有n种方法,一共有m个,所以方法数k=n*n*n...(n的m次方)。

然后我的方法是搜索,DFS(n+1,m,t),DFS(n,m+1,t)的两种状态,t=0或1意思是代表当前是A或者B进行操作。每次把这两种状态的k算出来,也就是pd(n+1,m),pd(n,m+1)判断是否小于A,如果大于等于A,肯定就Gg,再结合当前t(也就是谁进行操作)判断是赢还是输,当这两种状态都有一个返回值0或者1。0代表A会输,反之同理。当前状态是A操作的话,只要两个状态有一个为1,则当前状态为1,若当前状态是B操作的话,只有后续两个状态都为1,当前状态才为1。注意这里的DFS返回值0,1代表A是否输赢。从最后状态一直推到最先状态即可知道输赢。写到这里,大部分流程已经完成了。不知有没有注意到这里会出现一个平局状态。所以这里有一个特判。当篮子数为1的时候。如果增加篮子数超过A的话,那聪明的A,B肯定不会去选,所以只能增加苹果数,结果会导致平局。然后如果篮子数为1,A增加篮子数这时候状态就变成(2,m)转移给B,这时相当于B于这个状态开始游戏,若此状态是必输,则A肯定赢了。如果是必赢,则A肯定会去选择苹果数+1,状态变为(1,m+1)转移给B,B再进行同样的抉择,所以当篮子数等于1的时候,需要去特判这种情况。啊,好麻烦。。。有理也讲不清了。GG,直接上代码了。

#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <iostream>#include <cmath>#include <queue>#include <map>#include <stack>#include <list>#include <vector>using namespace std;//#define DEBUGint n,m,a;int pd(int n,int m){long long s=1;for (int i=1;i<=m;i++){s=s*n;if (s>=a) return 1;}return 0;}int f;int DFS(int n,int m,int t){int f1,f2,h1,h2;h1=pd(n+1,m);h2=pd(n,m+1);if (h1 && h2) {if (t==1) return 1;else return 0;}if (h1) {if (t==1) f1=1;else f1=0;}else f1=DFS(n+1,m,(t+1)%2);if (h2){if (t==1) f2=1;else f2=0;}else f2=DFS(n,m+1,(t+1)%2);if (t==0)if (f1+f2) return 1;else return 0;if (t==1){if (f1+f2==2) return 1;else return 0;}}int main(){#ifdef DEBUGfreopen("cin.txt", "r", stdin);freopen("cout.txt", "w", stdout);#endif//scanf("%d%d%d",&n,&m,&a);while (~scanf("%d%d%d",&n,&m,&a)){if (n==1) {int tt=0,flag=0;while (pd(2,m)==0 && !pd(n,m+1)){if (DFS(2,m,0)==0) {if (tt==0)printf("win\n");else printf("lose\n");flag=1;break;}else m++;tt=(tt+1)%2;}if (flag==0) printf("draw\n");}else    {    if (DFS(n,m,0)) printf("win\n");else printf("lose\n");}}return 0;}


0 0
原创粉丝点击