1 solutions
-
0
C++ :
#define FOR_EACH(i,c) for(auto (i) = (c).begin(); (i) != (c).end(); (i)++) #include<algorithm> //#include<array> #include<bitset> #include<complex> #include<deque> //#include<forward_list> #include<functional> #include<iostream> #include<limits> #include<list> #include<map> #include<string.h> #include<numeric> #include<queue> #include<set> #include<stack> #include<utility> #include<vector> const long double PI = 2*acos(.0L); typedef long long LLONG; typedef unsigned long long ULLONG; using namespace std; short a, b, c; int f[1000][1000]; bool bingo, inQ[1000][1000]; queue<pair<short, short>> q; bool relax(pair<short, short> u, pair<short, short> v) { if(f[u.first][u.second]+1 >= f[v.first][v.second]) return 0; f[v.first][v.second] = f[u.first][u.second]+1; if((v.first==0 && v.second==c) || (v.first==c && v.second==0)) { printf("%d\n", f[v.first][v.second]); bingo = 1; return 1; } if(!inQ[v.first][v.second]) { q.push(v); inQ[v.first][v.second] = 1; } return 0; } int main() { while(~scanf("%hd%hd%hd", &a, &b, &c)) { bingo = 0; memset(f, 0x7f, sizeof(f)); f[0][0] = 0; memset(inQ, 0, sizeof(inQ)); inQ[0][0] = 1; while(q.size()) q.pop(); q.push(make_pair(0, 0)); while(q.size()) { pair<short, short> u = q.front(); short t0; q.pop(); inQ[u.first][u.second] = 0; if(relax(u, make_pair(0, u.second))) break; if(relax(u, make_pair(a, u.second))) break; if(relax(u, make_pair(u.first, 0))) break; if(relax(u, make_pair(u.first, b))) break; t0 = min(u.first+0, b-u.second); if(relax(u, make_pair(u.first-t0, u.second+t0))) break; t0 = min(a-u.first, u.second+0); if(relax(u, make_pair(u.first+t0, u.second-t0))) break; } if(!bingo) puts("No solution!"); } return 0; }
- 1
Information
- ID
- 16435
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By