加载中…
个人资料
lovedream
lovedream
  • 博客等级:
  • 博客积分:0
  • 博客访问:60,165
  • 关注人气:40
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

HDU4111成都赛A题博弈

(2011-11-10 16:53:32)
标签:

杂谈

分类: ACM/ICPC解题报告

花了半天时间想清楚了:

1.全部是1的时候,是3的倍数时输否则赢;

2.只有一堆2其他全是1的时候,1的堆数是3的倍数时输否则赢;

3.其他情况下,计算出总和+堆数-1,若为偶数,且1的堆数是偶数,则一定输;

4.不在上述情况下则赢。

证明略去了,自己想想吧,逻辑比较容易混乱…也许是我太笨了吧…

#include<stdio.h>

bool f(int cnt,int Max,int s,int n)
{
    if(cnt==n)
        return n%3;
    if(cnt==n-1&&Max==2)
        return s%3-2;
    if((s+n-1)&1)
        return 1;
    return cnt&1;
}

int main()
{
    char ans[2][10]={"Bob","Alice"};
    int s,cnt,Max,n,i,t,ii,j;

    scanf("%d",&t);
    for(ii=1;ii<=t;ii++)
    {
        scanf("%d",&n);
        for(i=1,s=cnt=0,Max=1;i<=n;i++)
            scanf("%d",&j),s+=j,Max=Max>j?Max:j,cnt+=(j==1);
        printf("Case #%d: %s\n",ii,ans[f(cnt,Max,s,n)]);
    }
}

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有