Atcoder 2373 Cookie Exchanges

Problem Statement

 

Takahashi, Aoki and Snuke love cookies. They have AB and C cookies, respectively. Now, they will exchange those cookies by repeating the action below:

  • Each person simultaneously divides his cookies in half and gives one half to each of the other two persons.

This action will be repeated until there is a person with odd number of cookies in hand.

How many times will they repeat this action? Note that the answer may not be finite.

Constraints

 

  • 1≤A,B,C≤109

Input

 

Input is given from Standard Input in the following format:

A B C

Output

 

Print the number of times the action will be performed by the three people, if this number is finite. If it is infinite, print -1 instead.

Sample Input 1

 

4 12 20

Sample Output 1

 

3

Initially, Takahashi, Aoki and Snuke have 412 and 20 cookies. Then,

  • After the first action, they have 1612 and 8.
  • After the second action, they have 1012 and 14.
  • After the third action, they have 1312 and 11.

Now, Takahashi and Snuke have odd number of cookies, and therefore the answer is 3.

Sample Input 2

 

14 14 14

Sample Output 2

 

-1

Sample Input 3

 

454 414 444

Sample Output 3

 

1


a==b==c的时候会死循环,其他情况暴力算就行了,因为每一次操作之后最大值-最小值会减半,所以不久就能到达终止条件。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int A,B,C,tot,a,b,c;
int main(){
	scanf("%d%d%d",&A,&B,&C);
	while(!((A&1)||(B&1)||(C&1))){
		if(A==B&&B==C){
			puts("-1");
			return 0;
		}
		
		tot++,a=(B+C)>>1,b=(A+C)>>1,c=(B+A)>>1;
		A=a,B=b,C=c; 
	}
	
	printf("%d
",tot);
	return 0;
}

  

 
原文地址:https://www.cnblogs.com/JYYHH/p/8781615.html