糯米

TI DaVinci, gstreamer, ffmpeg
随笔 - 167, 文章 - 0, 评论 - 47, 引用 - 0
数据加载中……

POJ 1078 Gizilch 暴搜

题目大意:
A,B两个sb比赛吃葡萄,葡萄上有编号1,2,....100,得分是每个人吃过葡萄的编号的乘积。
比如吃了 2, 5, 10 号葡萄,分数就是 2*5*10 = 100。
葡萄吃完后,两个人报自己的分数。当然,可以虚报。
如果某个人报的分数是吃不出来的,那就算他作弊,另外一个人赢。
如果两个人报的分数有冲突,则分数低的赢。
如果两个人报的分数没有冲突,则分数高的赢。

思路:
枚举每个人吃葡萄的所有情况。。

#include <stdio.h>
#include 
<string.h>

__int64 val2;
char used[101];

int dfs(__int64 val, int idx, int flag)
{
    
if (val == 1 || val == 0{
        
if (!flag)
            
return 1;
        
return dfs(val2, 1000);
    }


    
for ( ; idx > 1; idx--{
        
if (!(val % idx) && !used[idx])
            
break;
    }

    
if (idx == 1)
        
return 0;

    used[idx] 
= 1;
    
if (dfs(val / idx, idx - 1, flag))
        
return 1;
    used[idx] 
= 0;

    
if (dfs(val, idx - 1, flag))
        
return 1;

    
return 0;
}


int can(__int64 val, int flag)
{
    memset(used, 
0sizeof(used));
    
return dfs(val, 100, flag);
}


int main()
{
    __int64 a, b, r;

    
while (scanf("%I64d%I64d"&a, &b) != EOF) {
        
if (a > b) {
            r 
= a;
            a 
= b;
            b 
= r;
        }

        val2 
= b;
        
if (!can(a, 0))
            r 
= b;
        
else if (!can(b, 0))
            r 
= a;
        
else if (can(a, 1))
            r 
=    b;
        
else
            r 
= a;
        printf(
"%I64d\n", r);
    }

    
    
return 0;
}


 

posted on 2010-02-13 02:02 糯米 阅读(395) 评论(0)  编辑 收藏 引用 所属分类: POJ


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理