Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct Cup{
- int first, second, third, count;
- bool operator<(const Cup& a) const{
- if(first != a.first){
- return first<a.first;
- }else if(second != a.second){
- return second<a.second;
- }
- return third<a.third;
- }
- };
- //Cup start;
- queue<Cup> q;
- set<Cup> visited;
- int start[3];
- int main(){
- //freopen("wine.in", "r", stdin);
- cin >> start[0] >> start[1] >> start[2];
- visited.insert({start[0], 0, 0, 0});
- //visited.insert({start.first, 0, 0, 1});
- q.push({start[0], 0, 0, 0});
- while(!q.empty()){
- Cup cur = q.front();
- q.pop();
- //cout << cur.first << ", " << cur.second << ", " << cur.third << '\n';
- //cout << cur.count << '\n';
- if((cur.first==cur.second && cur.third == 0) || (cur.first == cur.third && cur.second == 0) || (cur.second == cur.third && cur.first == 0)){
- //cout << "HI" << '\n';
- //cout << cur.first << ", " << cur.second << ", " << cur.third << '\n';
- cout << cur.count << '\n';
- return 0;
- }
- for(int i=0; i<3; i++){
- for(int j=0; j<3; j++){
- if(i==j){
- continue;
- }
- //cout << "i: " << i << ", j: " << j << '\n';
- int val[3] = {cur.first, cur.second, cur.third};
- if(val[i]>0){
- //cout << "i: " << i << ", j: " << j << '\n';
- if(val[i]+val[j]>start[j]){
- val[i] = (val[i]+val[j])-start[j];
- val[j] = start[j];
- }else if(val[i]+val[j]<=start[j]){
- val[j] = val[i]+val[j];
- val[i] = 0;
- }
- Cup temp = {val[0], val[1], val[2], cur.count+1};
- if(visited.find(temp) == visited.end()){
- //cout << "1: " << val[0] << ", 2: " << val[1] << ", 3: " << val[2] << '\n';
- visited.insert(temp);
- q.push(temp);
- }
- }
- }
- }
- }
- cout << "NO" << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement