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; }