Advertisement
DontCallMeNuttoPleas

TwoWaterTank

Apr 1st, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.92 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using pii=pair<int,int>;
  4. using pipii=pair<int,pii>;
  5. int main(){
  6.     int t;
  7.     scanf("%d",&t);
  8.     while(t--){
  9.         set<pii> visited;
  10.         int k=-1;
  11.         int n,m,g;
  12.         scanf("%d%d%d",&n,&m,&g);
  13.         queue<pipii> Q;
  14.         Q.push({0,{0,0}});
  15.         while(!Q.empty()){
  16.             int l=Q.front().second.first;
  17.             int r=Q.front().second.second;
  18.             int cnt=Q.front().first;
  19.             Q.pop();
  20.             if(visited.count({l,r})) continue;
  21.             if(l==g||r==g){
  22.                 k=cnt;
  23.                 break;
  24.             }
  25.             visited.insert({l,r});
  26.             //Fill
  27.             if(l<n) Q.push({cnt+1,{n,r}});
  28.             if(r<m) Q.push({cnt+1,{l,m}});
  29.             //L->R
  30.             if(l>0&&r!=m){
  31.                 if(l+r>m) Q.push({cnt+1,{l+r-m,m}});
  32.                 else Q.push({cnt+1,{0,l+r}});
  33.             }
  34.             //R->L
  35.             if(r>0&&l!=n){
  36.                 if(l+r>n) Q.push({cnt+1,{n,l+r-n}});
  37.                 else Q.push({cnt+1,{l+r,0}});
  38.             }
  39.             //Pour
  40.             if(l>0) Q.push({cnt+1,{0,r}});
  41.             if(r>0) Q.push({cnt+1,{l,0}});
  42.         }
  43.         printf("%d\n",k);
  44.     }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement