三个健美先生在森林里偶遇了他们分别有a,b,c颗健美糖果,并决定将自己的健美糖果与另外两个人分享.每一次他们会将自己上一轮的健美糖果平均分给剩下两个健美先生他们都非常基,一旦其中某个的健美糖果数变成了奇数,整个过程结束现在你想知道他们会进行多少轮分享,如果这个过程无法结束则输出-1
数据输出:
T
a1 b1 c1
aT bT cT
一道水题,先看代码:
code
#include<bits/stdc++.h>
#define ll long long
#define ri register int
#define N 50005
#define INF 2147483647
#define f(x,k,y,z) for(int x=k;x<=y;x+=z)
using namespace std;
int n,m,jk,sum;
__int128 a,b,c,aa,bb,cc,ans,k;
void read(__int128 &x)
{
x=0;int ff=1;
char ch=getchar();
while (ch<'0'||ch>'9')
{
if(ch=='-') ff=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
x*=ff;return;
}
void write(__int128 x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
return;
}
struct lenovo{
int to,nxt,val;
}v[N*2];
int main()
{
freopen("carry.in","r",stdin);
freopen("carry.out","w",stdout);
read(k);
while(k--)
{
read(a),read(b),read(c);ans=0;
if(a==b&&b==c&&a%2==0) printf("-1\n");
else
{
while(1)
{
if(a%2!=0||b%2!=0||c%2!=0) break;
aa=a>>1;bb=b>>1;cc=c>>1;
a=bb+cc;b=aa+cc;c=aa+bb;
ans++;
if(!(a%2==0&&b%2==0&&c%2==0)) break;
}
write(ans),putchar('\n');
}
}
return 0;
}
其实就是直接按照题意暴力就行!