2020牛客寒假算法基础集训营

(长期更新,补完为止)

2-G 判正误

题意:https://ac.nowcoder.com/acm/contest/3003/G

T组数据。

判断a^d+b^e+c^f是否等于g。

−1e9≤a,b,c,g≤1e9, 0≤d,e,f≤1e9。保证不会出现指数和底数同为 0 的情况。

思路:

硬算会TLE或MLE。

快速幂取模,为了增加过题概率,多取几个模数判断。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int n=6;
const ll mod[n]={998244353, 999998641, 100000007, 1000000007, 1000000009, 1000000103};
ll qmi(ll a,ll b,ll mod){
    ll res=1;
    while(b){
        if(b&1) res=res*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    return res;
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        ll a,b,c,d,e,f,g;
        scanf("%lld%lld%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e,&f,&g);
        string ans="Yes";
        for(int i=0;i<n;++i)
            if( ((qmi(a,d,mod[i])+qmi(b,e,mod[i]))%mod[i]+qmi(c,f,mod[i]))%mod[i]!=g%mod[i] ) {ans="No";break;}
        cout<<ans<<endl;
    }
}

下面是TLE的java大数代码。写个java不容易,所以代码也贴在这里......

import java.math.BigInteger;
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int t=in.nextInt();
        for(int Case=0;Case<t;++Case){
            BigInteger a=in.nextBigInteger(),b=in.nextBigInteger(),c=in.nextBigInteger();
            int d=in.nextInt(),e=in.nextInt(),f=in.nextInt();
            BigInteger g=in.nextBigInteger();
            BigInteger ans=((a.pow(d)).add(b.pow(e))).add(c.pow(f));
            if(ans.equals(g)) System.out.println("Yes");
            else System.out.println("No");
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值