2021 年百度之星·程序设计大赛 - 初赛二 1001 签到(找规律,快速幂)
Posted 小哈里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021 年百度之星·程序设计大赛 - 初赛二 1001 签到(找规律,快速幂)相关的知识,希望对你有一定的参考价值。
problem
签到 Accepts: 6141 Submissions: 13643
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Problem Description
给 a,ba,b ,每次 a,ba,b 会变为 a+b,a-ba+b,a−b ,问 kk 次之后变成了哪两个数,对 998244353998244353 取模,多组数据。
Input
第一行一个正整数 T(1\\leq T\\leq 100000)T(1≤T≤100000) ,代表测试组数。
接下来 TT 行每行三个数 a,b,k(0\\leq a,b<998244353,0\\leq k\\leq 10^9)a,b,k(0≤a,b<998244353,0≤k≤10
9
) 。
Output
TT 行每行两个整数,代表每一组数据 a,ba,b 最后变成了什么。
Sample Input
2
2 1 5
5 5 100
Sample Output
12 4
329904920 329904920
solution
- 找规律
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = 998244353;
LL mpow(LL a, LL x) {
if(x==0)return 1;
LL t = mpow(a, x>>1);
if(x%2==0)return t*t%mod;
return t*t%mod*a%mod;
}
int main(){
int T; cin>>T;
while(T--){
LL a, b, k; cin>>a>>b>>k;
if(k%2==1){
LL aa=a+b, bb=a-b, kk=(k-1)/2;
aa = (aa*mpow(2,kk)%mod+mod)%mod;
bb = (bb*mpow(2,kk)%mod+mod)%mod;
cout<<aa<<" "<<bb<<"\\n";
}else{
LL aa=a, bb=b, kk=k/2;
aa = (aa*mpow(2,kk)%mod+mod)%mod;
bb = (bb*mpow(2,kk)%mod+mod)%mod;
cout<<aa<<" "<<bb<<"\\n";
}
}
return 0;
}
/*
1 a=a+b b=a-b;
2 a=(a+b)+(a-b)=2a, b=(a+b)-(a-b)=2b
3 a=2a+2b, b=2a-2b
4 a=4a, b=4b
5 a=4a+4b, b=4a-4b
6 a=8a, b=8b
7
*/
以上是关于2021 年百度之星·程序设计大赛 - 初赛二 1001 签到(找规律,快速幂)的主要内容,如果未能解决你的问题,请参考以下文章
2021 年百度之星·程序设计大赛 - 初赛二 1005 水题(贪心结论)
2021 年百度之星·程序设计大赛 - 初赛二 1001 签到(找规律,快速幂)