牛半仙有三个妹子,属性值分别为 AAA,BBB,CCC。 这三个妹子有心灵感应,当一个人的属性值变化时其他人的属性值也会跟着变化。
变化规律如下: 假设第一个妹子属性值为 AAA ,第二个妹子属性值为 BBB,第三个妹子属性值为 CCC,
- 若 A+B≤CA+B≤CA+B≤C 则第一个妹子的属性值变为 2A2A2A,第二个妹子的属性值变为 2B2B2B,第三个妹子的属性值变为 C−A−BC−A−BC−A−B。
- 否则 设 AAA,BBB 中较小的属性值为 WWW,P=min(⌊C/2⌋,W−1)P=min(\lfloor C/2\rfloor,W-1)P=min(⌊C/2⌋,W−1) 。 则第一个妹子的属性值变为 A−PA−PA−P,第二个妹子的属性值变为 B+P−CB+P-CB+P−C,第三个妹子的属性值变为 2C2C2C。
牛半仙想知道第三个妹子经过 KKK 次变化后的属性值。 因为 牛半仙还要去和妹子畅谈人生,所以他把这个问题交给你了。
链接:https://ac.nowcoder.com/acm/contest/7609/A
来源:牛客网
简化体面给定两个数 a (a=A+B)a\ (a=A+B)a (a=A+B) 和 b (b=C)b\ (b=C)b (b=C)
若 b>ab>ab>a 则 b=b−a , a=2⋅ab=b-a\ ,\ a=2\cdot ab=b−a , a=2⋅a
否则 b=2⋅b , a=a−bb=2\cdot b\ ,\ a=a-bb=2⋅b , a=a−b
讨论b的取值分类讨论可以得出结论
ans=(2k⋅b)mod(a+b)ans=(2^k \cdot b)mod(a+b)ans=(2k⋅b)mod(a+b)
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull t,u,v,mod,b,k,ans;
inline ull ksm(ull x,ull y){
ull res=1;
while(y){
if(y&1)res=res*x%mod;
x=x*x%mod; y>>=1;
}
return res;
}
int main(){
scanf("%llu",&t);
while(t--){
scanf("%llu %llu %llu %llu",&u,&v,&b,&k);
mod=u+v+b;
ans=ksm(2,k)*b%mod;
printf("%llu\n",ans);
}
}
这是一个关于数学逻辑的问题,涉及到一系列属性值的变化规则。给定三个妹子的属性值AAA, BBB, CCC,根据特定条件,这些属性值会按一定方式互相影响。题目要求求解在经过KKK次变化后,第三个妹子的属性值。解决方案通过模运算和指数运算来确定最终值。
T1牛半仙的妹子数&spm=1001.2101.3001.5002&articleId=109231398&d=1&t=3&u=0106aacb30d442a89c3f3943cd984f0d)
464

被折叠的 条评论
为什么被折叠?



