Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int INF=1e9;
- using pi = pair<int,int>;
- using pii = pair< int , pair<int,int> >;
- int main(){
- int t;
- scanf("%d",&t);
- while(t--){
- int n,m,want;
- scanf("%d %d %d",&n,&m,&want);
- map< pi , bool > visited;
- priority_queue <pii,vector<pii>,greater<pii>> pq;
- pq.push({ 0 , {0,0} });
- bool fl=false;
- while(pq.size()>0){
- int v1,v2,d;
- d=pq.top().first;
- v1=pq.top().second.first;
- v2=pq.top().second.second;
- pq.pop();
- if(visited[{v1,v2}]) continue;
- visited[{v1,v2}] = true;
- if(v1==want||v2==want){
- printf("%d",d);
- fl=true;
- break;
- }
- if(v1==0)//fill_1
- pq.push({d+1,{n,v2} });
- if(v2==0)//fill_2
- pq.push({d+1,{v1,m} });
- if(v1!=0)//throw away_1
- pq.push({d+1,{0,v2} });
- if(v2!=0)//throw away_2
- pq.push({d+1,{v1,0} });
- if(v1!=n){
- v1=v1+v2;
- if(v1>n){
- v2=v1-n;
- v1=n;
- }
- else v2=0;
- pq.push({d+1,{v1,v2}});
- }
- if(v2!=m){
- v2=v1+v2;
- if(v2>m){
- v1=v2-m;
- v2=m;
- }
- else v1=0;
- pq.push({d+1,{v1,v2}});
- }
- }
- if(!fl) printf("-1");
- printf("\n");
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment