• 2013年省赛H题


    2013年省赛H题
    你不能每次都快速幂算A^x,优化就是预处理,把10^9预处理成10^5和10^4。
    想法真的是非常巧妙啊
    N=100000
    构造两个数组,f1[N],间隔为A
    f2[1e4]间隔为A^N,中间用f1来填补
    f[x]=f1[x%N]*f2[x/N]%P;

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<queue>
     4 #include<algorithm>
     5 #include<cmath>
     6 #include<ctime>
     7 #include<set>
     8 #include<map>
     9 #include<stack>
    10 #include<cstring>
    11 #define inf 2147483647
    12 #define ls rt<<1
    13 #define rs rt<<1|1
    14 #define lson ls,nl,mid,l,r
    15 #define rson rs,mid+1,nr,l,r
    16 #define N 100000
    17 #define For(i,a,b) for(long long i=a;i<=b;i++)
    18 #define p(a) putchar(a)
    19 #define g() getchar()
    20 
    21 using namespace std;
    22 long long T,ans,cnt;
    23 long long n,A,K,a,b,m,P;
    24 long long f1[100010],f2[100010],f[1000010];
    25 
    26 void in(long long &x){
    27     long long y=1;
    28     char c=g();x=0;
    29     while(c<'0'||c>'9'){
    30         if(c=='-')y=-1;
    31         c=g();
    32     }
    33     while(c<='9'&&c>='0'){
    34         x=(x<<1)+(x<<3)+c-'0';c=g();
    35     }
    36     x*=y;
    37 }
    38 void o(long long x){
    39     if(x<0){
    40         p('-');
    41         x=-x;
    42     }
    43     if(x>9)o(x/10);
    44     p(x%10+'0');
    45 }
    46 
    47 void predeal(){
    48     f1[0]=f2[0]=1;
    49     For(i,1,N)
    50         f1[i]=f1[i-1]*A%P;
    51     For(i,1,1e4)
    52         f2[i]=f2[i-1]*f1[N]%P;
    53 }
    54 
    55 int main(){
    56     in(T);
    57     while(T--){
    58         in(n);in(A);in(K);in(a);in(b);in(m);in(P);
    59         predeal();
    60         f[1]=K;
    61         For(i,2,n)
    62             f[i]=(a*f[i-1]+b)%m;
    63         ans=0;
    64         For(i,1,n){
    65             ans+=f1[f[i]%N]*f2[f[i]/N]%P;
    66             ans%=P;
    67         }
    68         cout<<"Case #"<<++cnt<<": "<<ans<<endl;
    69     }
    70     return 0;
    71 }
    View Code
  • 相关阅读:
    更易型算法(Manipulating Algorithms)
    迭代器之配接器
    Windows下BBv2安装编译libtorrent
    swfupload简单使用
    Openx 中文编码解决方案
    常见c语言编译错误解析(转)
    新建一个scrapy项目
    判断两个日期的时间部分之差
    javascript弹出子窗口并返回值
    转:浅析ASP.NET中页面传值的几种方法
  • 原文地址:https://www.cnblogs.com/war1111/p/10784685.html
Copyright © 2020-2023  润新知