[思维好题] yyr的妹子数

二哥好强啊

yyr的妹子数
三个值 a , b , c a,b,c a,b,c,一些操作

  1. a + b ≤ c ⇒ a = a ∗ 2 , b = b ∗ 2 , c = c − a − b a+b\le c\Rightarrow a=a*2,b=b*2,c=c-a-b a+bca=a2,b=b2,c=cab
  2. a + b > c ⇒ p = min ⁡ ( ⌊ c 2 ⌋ , min ⁡ ( a , b ) − 1 ) , a = a − p , b = b + p − c , c = c ∗ 2 a+b>c\Rightarrow p=\min(\lfloor\frac{c}{2}\rfloor,\min(a,b)-1),a=a-p,b=b+p-c,c=c*2 a+b>cp=min(2c,min(a,b)1),a=ap,b=b+pc,c=c2

然后又是想到倒数第二步没想到最后一步

p p p就是个幌子
a + b a+b a+b合并为一个整体,记为 d d d,这两个操作变为

  1. d ≤ c ⇒ d = d ∗ 2 , c = c − d d\le c\Rightarrow d=d*2,c=c-d dcd=d2,c=cd
  2. d > c ⇒ d = d − c , c = c ∗ 2 d>c\Rightarrow d=d-c,c=c*2 d>cd=dc,c=c2

并且有 c + d c+d c+d为定值,记为 s s s
c = s − d , d = d − c = 2 d − s c=s-d,d=d-c=2d-s c=sd,d=dc=2ds d = 2 d d=2d d=2d
发现每次操作带来的 d d d 2 d   m o d   s 2d\bmod s 2dmods
就完啦

#include<bits/stdc++.h>
using namespace std;
#define in Read()
int in{
	int i=0;char f=true;char ch=0;
	while(!isdigit(ch)&&ch!='-') ch=getchar();
	if(ch=='-') ch=getchar(),f=false;
	while(isdigit(ch)) i=(i<<3)+(i<<1)+ch-48,ch=getchar();
	return f?i:-i;
}

int s;

int qpw(int a,int b){
	int res=1;
	while(b){
		if(b&1) res=1ll*res*a%s;
		a=a*a%s;
		b>>=1;
	}
	return res;
}

int main(){
	int T=in;
	while(T--){
		int a=in,b=in,c=in,k=in;
		s=a+b+c;
		printf("%d\n",1ll*c*qpw(2,k)%s);
	}
	return 0;
}

long long 还要卡你
我已经无话可说

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值