【NOIP2017提高A组模拟9.19】Candy

       三个健美先生在森林里偶遇了他们分别有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;
}

其实就是直接按照题意暴力就行!

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值