求助月赛D题的一个问题
  • 板块学术版
  • 楼主SJZ2010
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/7/1 18:28
  • 上次更新2023/11/3 11:57:36
查看原帖
求助月赛D题的一个问题
809729
SJZ2010楼主2023/7/1 18:28

写这题纯属骗分

代码这个数据过不来

17 1960
1
4913

提交的代码输出 0

代码:(加了注释的哪行是调试的,调试时0懒得输出了)

#include<cstdio>
#include<math.h>
using namespace std;
const long long MOD=998244353;
long long quick_pow(long long a,long long b,const long long mod){
    long long res=1;
    a%=mod;
    while(b>0){
        if(b&1)
            res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res%mod;
}
long long a,b,c,x,n;
double mylog(long long p,long long q){
    return log(q)/log(p);
}

int main(){
    printf("%.2lf",floor(3.000));
    scanf("%lld %lld %lld %lld",&a,&b,&c,&c);
    scanf("%lld",&n);
    long long aaa=1;
    for(int i=1;i<=b;i++)
        aaa*=a;
    while(n--){
        scanf("%lld",&x);
        if(x==1){
            printf("0 ");
            continue;
        }
        if(mylog(a,x)-floor(mylog(a,x))>1e-4){
            printf("%.10lf %.10lf",floor(mylog(a,x)),mylog(a,x));//////////////////////
            continue;
        }
        if(abs(mylog(a,x)-b)<=1e-8){
            printf("1 ");
            continue;
        }
        printf("%lld ",quick_pow(2,b-floor(mylog(a,x))-1,MOD));
    }
    return 0;
}

输出为:

2.0000000000 3.0000000000

33 怎么会向下取整变成 22 ?

2023/7/1 18:28
加载中...