zoukankan      html  css  js  c++  java
  • digits

    Digits
    (digits.cpp/c/pas)
    Description
    给一个关于x的多项式,并给定一个x,求该多项式在带入该x时的值最后k位数字。
    Input
    第一行两个整数n、k;
    之后的 行,每行两个数ai和bi,表示多项式的一项 aix^bi;
    最后一行一个整数x。
    Output
    输出k行,按顺序输出该多项式带入x后值的最后k位数字,若不足k位,则高位补零。
    Example
    digits.in
    2 1
    3 2
    1 5
    3
    digits.out
    0
    附加样例见选手目录下『digits』文件夹。

    Hint
    对于30%的数据,n,k,ai,bi<=3,x<=10 ;
    对于100%的数据,1<=n<=100000,1<=ai,bi,x<=10^9,1<=k<=8。

    【题目分析】

    快速幂取模,一定要随时!随时!随时%%%!

    /*
        评测机上我只有40分,然而我把每一组数据都代入输出,与nancheng58(评测100分)的输出一毛一样!!!为什么评测机给我40!!!我感受到了来自世界深深的恶意!
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    long long x,a[100010],b[100010],sum=0,mod=1,ch,yy;
    int n,k,an[10];
    long long ksm(long long a,long long p)
    {
        long long ans=1;
        for(;p;p>>=1,a=(a*a)%mod)//here.
          if(p&1)
            ans=ans%mod*a%mod;
        return ans; 
    }
    int main()
    {
        freopen("digits10.in","r",stdin);
        freopen("digits.out","w",stdout);
        scanf("%lld%d",&n,&k);
        for(int i=1;i<=k;i++)
            mod=mod*10;
        for(int i=1;i<=n;i++)
            scanf("%lld%lld",&a[i],&b[i]);
        scanf("%lld",&x);
        for(int i=1;i<=n;i++)
        {
            ch=ksm(x%mod,b[i]);
            yy=(ch%mod)*(a[i]%mod);
            sum=(sum%mod+(yy%mod))%mod;
        }
        an[8]=sum/10000000;
        an[7]=sum/1000000%10;
        an[6]=sum/100000%10;
        an[5]=sum/10000%10;
        an[4]=sum/1000%10;
        an[3]=sum/100%10;
        an[2]=sum/10%10;
        an[1]=sum%10;
        for(int i=k;i>=1;i--)
            printf("%d
    ",an[i]);
        fclose(stdin);fclose(stdout);
        return 0;
    }
    
    
    
    
    
    //下面附上nancheng58满分代码(郁闷!)
    
    #include<iostream>
    #include<cstdio>
    #define MAXN 100001
    #define LL long long
    using namespace std;
    LL n,k,a[MAXN],b[MAXN],mod,m,lim,ans,c[14];
    LL read()
    {
        LL x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
        return x*f;
    }
    LL mi(LL x,LL y)
    {
        LL tot=1;
        while(y)
        {
            if(y&1) tot=(tot*x)%mod;
            x=(x*x)%mod;
            y>>=1;
        }
        return tot;
    }
    int main()
    {
        freopen("digits10.in","r",stdin);
        freopen("digits.out","w",stdout);
        n=read(),mod=read();
        lim=m=mod;mod=1;
        while(m--) mod*=10;
        for(int i=1;i<=n;i++)
          a[i]=read()%mod,b[i]=read();
        k=read();
        k%=mod;
        for(int i=1;i<=n;i++)
        {
            ans=(ans+a[i]*mi(k,b[i])%mod)%mod;
        }
        for(int i=lim;i>=1;i--)
        {
            c[i]=ans%10;
            ans/=10;
        }
        for(int i=1;i<=lim;i++)
          printf("%d
    ",c[i]);
        fclose(stdin);fclose(stdout);
        return 0;
    }
  • 相关阅读:
    javaweb消息中间件——rabbitmq入门
    virtual box 桥接模式(bridge adapter)下无法获取ip(determine ip failed)的解决方法
    Apache Kylin本地启动
    git操作
    Java学习总结
    Java中同步的几种实现方式
    hibernate exception nested transactions not supported 解决方法
    vue 中解决移动端使用 js sdk 在ios 上一直报invalid signature 的问题解决
    cookie 的使用
    vue 专门为了解决修改微信标题而生的项目
  • 原文地址:https://www.cnblogs.com/xiaoningmeng/p/5794741.html
Copyright © 2011-2022 走看看