アルゴリズムデザインコンペティション2020

https://ac.nowcoder.com/acm/contest/3004/E

 

 

 

1の#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3  CONST  長い  MOD =(INT)1E9 + 7 4  INT I、I 0、T。
5  長い 長い CNTA [ 70 ]、CNTB [ 70 ]、DP [ 70 ] [ 70 ] [ 2 ]、[ 70 ]。
6つの 長い 長い DFS(INT LEN、BOOLマキシ、INT K、ブールF)
 7  {
 8      もし(DP [LEN] [K] [F] = - !1 &&マキシ!)戻りDP [LEN] [K] [F]。
9      もし(!LEN)リターンF;
10      長い 長い CNT = 0 11      INT限界=マキシA [LEN]:1 12      のためにINT iが= 0 ; I <=リミット; I ++ ){
 13          、CNT + = DFSは(len- 1、マキシ&& A [LEN] == I、K、F || LEN == K && Iに)。
14      }
 15      リターンマキシCNT:DP [LEN] [K] [F] = CNT。
16  }
 17  長い ロングDIV(長い  TMP、INT K)
 18  {
 19      のmemset(0はsizeof ())。
20      INT P = 0 21      一方(TMP)++ P] = TMP%2、TMP / = 2 22の     リターン DFS(p、1、K、0 );
23  }
 24  長い  INV(長い 長い X、長い 長いMOD)
 25  {
 26      長い  K = mod-2、ANS = 1 27      一方、(K)
 28      {
 29          であれば(K&1)ANS = ANS * X%MOD。
30          X = X * X%のMOD。
31          K >> = 1 32      }
 33      リターンANS。
34  }
 35  、INT ()主
 36  {
 37      のmemset(DP、 - 1はsizeof (DP))。
38      のscanf(" %dの"、&T)。
39      しばらく(T--){
 40          長い  L1、R1、L2、R2、P = 1、ANS = 0 41          のscanf(" %LLD%LLD%LLD%LLD "、&​​L1&R1、&L2、およびR2)。
42の          L1 - 、l2-- 43          のために(iは= 1 ; I <= 60、I ++、P * = 2 ){
 44              CNTA [I] = DIV(R1、I) - DIV(L1、I)。
45              CNTB [I] = DIV(R2、I) - DIV(L2、I)。
46              ANS + =(CNTA [I]%MOD *((R2-L2-CNTB [I])%のMOD)%MOD + CNTB [I]%MOD *((R1-L1-CNTA [I])%のMOD)% MOD)*(P%MOD)%のMOD。
47             %ANS = V。
48          }
 49          ANS%= V、V = + ANS、ANS%= V。
50          ANS = ANS * INV(((R1-L1)のV%)*((R 2 L 2)v%で)%のV、V)%のV。
51          のprintf(" %のLLD \ n " 、ANS)。
52      }
 53      リターン 0 54 }

 

おすすめ

転載: www.cnblogs.com/pangbi/p/12288058.html