zoukankan      html  css  js  c++  java
  • jzoj3327. 陶陶的难题

    Description

    陶陶给Crash出了一个大难题,他要求Crash计算出下面式子的值:
    x=LRAx+CBsum_{x=L}^Rlfloor frac{Ax+C}{B} floor
    其中A,B,C,L,R均为给定正整数。由于答案可能会很大,你只需要输出答案mod 1,000,000,007后的值。

    Input

    输入文件名为 task . in,共一行,包含五个正整数A,B,C,L,R(L<=R)。

    Output

    输出文件名为 task . out,共一行,包含一个非负整数,表示答案。

    Sample Input

    2 3 1 1 3

    Sample Output

    9

    Data Constraint

    对于30%的数据满足 R-L<=10^6
    对于100%的数据满足 A,B,C,L,R<=10^9

    题解

    我们可以直接看到:
    https://blog.csdn.net/HiChocolate/article/details/84887553

    代码

    type
            new=record
                    f,g,h:longint;
            end;
    var
            i,j,k,n,m:longint;
            answer,a,b,c,l,r:int64;
            mo:int64=1000000007;
            ni2:int64=500000004;
            ni6:int64=166666668;
            ans:new;
    function likegcd(a,b,c,n:int64):new;
    var
            now,last:new;
            op1,op2,op3,m,t,p,e,h,qh:int64;
    begin
            if a=0 then
            begin
                    likegcd.f:=0;likegcd.g:=0;likegcd.h:=0;
                    exit;
            end
            else
            begin
                    if (a>=c) or (b>=c) then
                    begin
                            last:=likegcd(a mod c,b mod c,c,n);
                            h:=a div c;
                            e:=b div c;
                            now.f:=(n+1)*n mod mo*h mod mo*ni2 mod mo;
                            now.f:=(now.f+e*(n+1) mod mo) mod mo;
                            now.f:=(now.f+last.f) mod mo;
    
                            now.g:=(h*n mod mo*(n+1) mod mo*(2*n+1) mod mo*ni6 mod mo);
                            now.g:=(now.g+e*(n+1) mod mo*n mod mo*ni2 mod mo) mod mo;
                            now.g:=(now.g+last.g) mod mo;
    
                            now.h:=h*h mod mo*n mod mo*(n+1) mod mo*(2*n+1) mod mo*ni6 mod mo;
                            now.h:=(now.h+e*e mod mo*(n+1) mod mo) mod mo;
                            now.h:=(now.h+e*h mod mo*n mod mo*(n+1) mod mo) mod mo;
                            now.h:=(now.h+2*h mod mo*last.g mod mo) mod mo;
                            now.h:=(now.h+2*e mod mo*last.f mod mo) mod mo;
                            now.h:=(now.h+last.h) mod mo;
                    end
                    else
                    begin
                            m:=((a*n)+b) div c;
                            last:=likegcd(c,c-b-1,a,m-1);
                            now.f:=(n*m mod mo-last.f+mo) mod mo;
    
                            now.g:=((n+1)*n mod mo*m mod mo-last.f-last.h+mo) mod mo;
                            now.g:=(now.g*ni2) mod mo;
    
                            now.h:=(n*m mod mo*(m+1) mod mo-2*last.f+2*mo-2*last.g+2*mo-now.f+mo) mod mo;
                    end;
                    exit(now);
            end;
    end;
    begin
            assign(input,'task.in');reset(input);
            assign(output,'task.out');rewrite(output);
            readln(a,c,b,l,r);
            ans:=likegcd(a,b,c,r);
            answer:=answer+ans.g;
            ans:=likegcd(a,b,c,l-1);
            answer:=(answer-ans.g+2*mo) mod mo;
            writeln(answer);
    end.
    
    我活在这夜里。无论周围多么黑暗,我都要努力发光!我相信着,终有一天,我会在这深邃的夜里,造就一道最美的彩虹。
  • 相关阅读:
    ansible 2.2的源码编译安装
    存储过程-快速上手
    从库重启后报1062错误
    删除一张600万记录表的一个索引需要多长时间?
    mysql主从复制Error1205
    浅谈管理(三)如何管理资料库
    kettle之时间字段默认值为空或’0000-00-00’问题
    浅谈管理(二)项目管理
    乌龙之Ignoring query to other database问题
    一、安装
  • 原文地址:https://www.cnblogs.com/RainbowCrown/p/11148380.html
Copyright © 2011-2022 走看看