首页 > 代码库 > HDU_1495_模拟

HDU_1495_模拟

http://acm.split.hdu.edu.cn/showproblem.php?pid=1495

 

自己用模拟写的,先除以三个数的最大公约数,弱可乐为奇数,则无解,然后开始模拟。

利用大杯子和小杯子的差为偶数,可以制造出不同的数,最终得到结果。

这题还可以用bfs暴力做,另外还可以用数论知识退出一个简单的结果,可怕= =

详情:http://blog.csdn.net/v5zsq/article/details/52097459

 

#include<iostream>#include<cstdio>using namespace std;int gcd(int a,int b){    return b?gcd(b,a%b):a;}int main(){    int s,m,n;    while(cin >> s >> n >> m && s && n && m)    {        int g = gcd(m,n);        int a = s/g;        if(a%2)        {            printf("NO\n");            continue;        }        int big = max(m,n)/g;        int small = min(m,n)/g;        int x = a-big,y = big,z = 0,num = 1;;        while(y != a/2)        {            if(y > small)            {                y -= small;                x += small;                num += 2;            }            else if(y < small)            {                z = y;                x -= big;                y = big;                y -= small-z;                x += small;                z = 0;                num += 4;            }            else            {                num = 0;                break;            }        }        if(!num)    printf("NO");        else        {            if(z)   printf("%d\n",num+1);            else    printf("%d\n",num);        }    }    return 0;}

 

HDU_1495_模拟