二哥好强啊
yyr的妹子数 三个值 a , b , c a,b,c a,b,c,一些操作
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+b≤c⇒a=a∗2,b=b∗2,c=c−a−b 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>c⇒p=min(⌊2c⌋,min(a,b)−1),a=a−p,b=b+p−c,c=c∗2然后又是想到倒数第二步没想到最后一步
p p p就是个幌子 a + b a+b a+b合并为一个整体,记为 d d d,这两个操作变为
d ≤ c ⇒ d = d ∗ 2 , c = c − d d\le c\Rightarrow d=d*2,c=c-d d≤c⇒d=d∗2,c=c−d d > c ⇒ d = d − c , c = c ∗ 2 d>c\Rightarrow d=d-c,c=c*2 d>c⇒d=d−c,c=c∗2并且有 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=s−d,d=d−c=2d−s或 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 还要卡你 我已经无话可说