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 签到(找规律,快速幂)

2021 年百度之星·程序设计大赛 - 初赛二 1003 魔怔(并查集,联通性,欧拉回路)

2019 年百度之星·程序设计大赛 - 初赛二

2019 年百度之星·程序设计大赛 - 初赛三

2020百度之星程序设计大赛初赛二