[思维好题] yyr的妹子数

it2025-03-28  3

二哥好强啊

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+bca=a2,b=b2,c=cab 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,这两个操作变为

d ≤ c ⇒ d = d ∗ 2 , c = c − d d\le c\Rightarrow d=d*2,c=c-d dcd=d2,c=cd 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)