HDU 1495 非常可乐 (kuangbin带你飞 专题一:简单搜索)
2015-01-23 15:15
609 查看
六种倒可乐情况...m到n或s,n倒m或s,s倒n或m...每一种倒法都有两种:倒满了或者没倒满...应该不算是难题,不过就是不好写...写的满令人崩溃的...去hdu交这个题目的时候发现以前A过了,看了一下好像是看的讨论版的规律...真是惭愧...
BFS写法:
规律写法:
BFS写法:
#include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<queue> #include<iostream> using namespace std; int used[105][105];//判断两个杯子装可乐的情况是否出现过 struct node { int m,n,s,t; }; int m,n,s; int bfs() { queue<node> q; node now,next; now.m=now.n=now.t=0; now.s=s; q.push(now); memset(used,0,sizeof(used)); used[0][0]=1; while(!q.empty()) { now=q.front(); q.pop(); if(now.n==now.s&&now.s==s/2) return now.t; if(now.m+now.s>m) //s->m { next.m=m,next.n=now.n,next.s=now.m+now.s-m,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } else { next.m=now.m+now.s,next.n=now.n,next.s=0,next.t=now.t; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } if(now.n+now.s>n) //s->n { next.m=now.m,next.n=n,next.s=now.n+now.s-n,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } else { next.m=now.m,next.n=now.n+now.s,next.s=0,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } if(now.m+now.n>n) //m->n { next.m=now.m+now.n-n,next.n=n,next.s=now.s,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } else { next.m=0,next.n=now.n+now.m,next.s=now.s,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } if(now.m+now.s>s) //m->s { next.m=now.m+now.s-s,next.n=now.n,next.s=s,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } else { next.m=0,next.n=now.n,next.s=now.m+now.s,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } if(now.n+now.m>m) //n->m { next.m=m,next.n=now.n+now.m-m,next.s=now.s,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } else { next.m=now.n+now.m,next.n=0,next.s=now.s,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } if(now.n+now.s>s) //n->s { next.m=now.m,next.n=now.n+now.s-s,next.s=s,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } else { next.m=now.m,next.n=0,next.s=now.n+now.s,next.t=now.t+1; if(used[next.m][next.n]==0) { used[next.m][next.n]=1; q.push(next); } } } return -1; } int main() { while(cin>>s>>n>>m,n+m+s) { if(s%2) printf("NO\n"); else { if(n<m) swap(n,m); int ans=bfs(); if(ans==-1) printf("NO\n"); else printf("%d\n",ans); } } return 0; }
规律写法:
#include <cstdio> int gcd(int x, int y) { return y ? gcd(y, x % y) : x; } int main() { int a, b, c; while (scanf("%i%i%i", &a, &b, &c), a + b + c) { (a /= gcd(b, c)) & 1 && ~puts("NO") || printf("%i\n", a - 1); } return 0; }
相关文章推荐
- HDU 1495 非常可乐([kuangbin带你飞]专题一 简单搜索)
- [kuangbin带你飞]专题一 简单搜索M - 非常可乐(HDU 1495)
- [kuangbin带你飞]专题一 简单搜索 M - 非常可乐 HDU 1495
- 搜索专题(BFS)HDU 1495-非常可乐
- HDU - 1495 非常可乐(15.10.10 搜索专题)bfs
- 杭电1495 非常可乐(BFS过)简单搜索
- [kuangbin带你飞]专题一 简单搜索 M HDU 1495
- HDU 1495 非常可乐(隐式图搜索)
- hdu 1495 非常可乐(简单的的bfs)
- hdu1495 非常可乐(简单BFS)
- HDU 1495 非常可乐【隐式图搜索,BFS】
- HDU 1495 非常可乐(简单BFS)
- HDU 1495 非常可乐 BFS搜索 TWT Tokyo Olympic 4combo-1
- HDU 1495 非常可乐 BFS搜索
- HDU 2612 find a way (kuangbin带你飞 专题一:简单搜索)
- HDU 1495 非常可乐 BFS 搜索
- HDU 2612 Find a way([kuangbin带你飞]专题一 简单搜索)
- HDU 1495 非常可乐!!!(隐式图状态搜索+bfs+map状态查重)
- HDU 1495 非常可乐(搜索)
- HDU 1241 Oil Deposits ([kuangbin带你飞]专题一 简单搜索)