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;
    }
  • 相关阅读:
    如何在myeclipse上使用git(码云)
    myeclipse使用git图文教程
    内存buffer转换为多维数组访问
    fd究竟是何方神圣
    getline c实现
    TLB初始化 Missing Handler,MIPS R3K mips_init_tlb
    Ubuntu 16.04 风扇特别响解决办法
    MySQL安装与卸载
    linux项目环境部署入门
    MySQL入门笔记一
  • 原文地址:https://www.cnblogs.com/xiaoningmeng/p/5794741.html
Copyright © 2011-2022 走看看