#3848 EX 面筋棒
描述
与 jerryzhong 的决战在即,ljr 需要一件压场子的终极武器。 ljr 手上有 M 个面筋,能量值分别为 1-M 的整数。现在 ljr 想要利用这些面筋制作他的 终极武器:EX 面筋棒。EX 面筋棒是一种能够发射强大剑气的能量武器。它由一些面筋按 次序连接而成。EX 面筋棒可能会发射失败,ljr 无法承受失败的损失。在 SPW 财团的资助 下,经过上百次的实验,ljr 终于发现了面筋棒成功发射剑气的规律:
·ljr 臂力不行,拿不动太长的 EX 面筋棒,所以面筋棒的长度 L 不能大于 N,当然它的 长度不能为 0。
·每次发动攻击时,面筋棒会被触发 L 次,第 i 次触发会激活前 i 个面筋,进入蓄能状 态。
·对于第 i 次触发,首先剑气能量会聚集在已经激活的能量值最小的面筋上,然后能量 会自发地寻找更高的能量值,如果当前面筋棒中某一个面筋 x 的能量值 y 是大于当前剑气能 量的面筋中,最小的一个,那么剑气能量会转移到面筋 x 上,并提高至 y。如果 x 未被激活, 则 EX 面筋棒会由于能量溢出而发射失败。
·当发射能量达到当前已激活的面筋中的最大值,则第 i 次触发的能量聚集完成。 ·只有当 L 次触发的能量全部完成聚集,Ex 面筋棒才能成功发射剑气。
ljr 急切地想报复 jerryzhong,他想知道,利用他手上的面筋,能够制造出多少种不同的 可以成功发射剑气的 EX 面筋棒。两种面筋棒不同当且仅当他们的长度不同,或某一个位置 上面筋能量不同。由于方案数太大,你只需要告诉他答案除以 19260817 的余数。
由于能量自发地提高违反了物理定律,这导致了时空的崩塌,世界线之间的隔阂被打破。 这时,你眼前突然出现了 Q 个来自各自世界的 ljr,每个 ljr 都想知道方案总数,但是他们拥 有的面筋不一样,并且他们的牛(sao)逼程度也不一样。你需要帮助每一个世界的 ljr 算出 方案总数。
输入
第一行一个整数 Q,意义如题所述。
接下来 Q 行每行 2 个整数 M,N,意义如题所述。
输出
Q 行每行一个整数表示方案总数。
提示
将 EX 面筋棒看做数列,则下列不同的组成都是能够成功发射的:
长度为 1:{1},{2},{3},{4}
长度为 2 : {1 2},{1 3},{1 4},{2 1},{2 3},{2 4},{3 1},{3 2},{3 4},{4 1},{4 2},{4 3}
长度为 3: {1 2 3},{1 2 4},{1 3 4},{2 1 3},{2 1 4},{2 3 1},{2 3 4},{2 4 1},{3 1 4},{3 2 1},{3 2 4},{3 4 1},{3 4 2},{4 2 1},{4 3 1},{4 3 2}
长度为 4: {1 2 3 4},{2 1 3 4},{2 1 4 3},{2 3 1 4},{3 2 1 4},{3 2 4 1},{3 4 2 1},{4 3 2 1} 一共 40 种,所以你输出 40。 {2,1,3,4}的发射过程:
第 1 次触发,激活第 1 个面筋,能量所在的位置(下标):1。能量最终为 2 达到了已 激活面筋的最大能量值 2。
第 2 次触发,激活第 1,2 个面筋,能量转移方向:2->1。能量最终为 2,达到了已激活 面筋的最大能量值 2。
第 3 次触发,激活第 1,2,3 个面筋,能量转移方向:2->1->3。能量最终为 3,达到了已 激活面筋的最大能量值 3。
第 4 次触发,激活第 1,2,3,4 个面筋,能量转移方向:2->1->3->4。能量最终为 4,达到 了已激活面筋的最大能量值 4。
四次触发都完成了能量的聚集,所以该型号 EX 面筋棒能够成功发射。 {1,4,2,3}的发射失败过程:
第 1 次触发,激活第 1 个面筋,能量在 1,最终为 1,聚能成功。
第 2 次触发,只激活了第 1,2 个面筋。能量首先在 1,然后转移至 3。由于 3 未被激活, 能量溢出,发射失败。
后两次触发无论是否成功,该型号 EX 面筋棒都不能成功发射。
{1,2,3,4,5}不能成功发射,是因为 ljr 拿不动长度为 5 的面筋棒,且没有能量值为 5 的面筋。
数据范围与约定
对于 100%的数据,保证有 M>=N。
数据范围
numQ M N
1 ≤6 ≤6 ≤6
2 ≤10 ≤10 ≤10
3 ≤1 ≤1000 ≤1000
4 ≤2000 ≤2000 ≤2000
5 ≤4000 ≤4000 ≤4000
6 ≤5000 ≤5000 ≤5000
7 ≤100000 ≤100000 ≤100000
8 ≤100000 ≤100000 ≤100000
9 ≤100000 ≤100000 ≤100000
10 ≤100000 ≤100000 ≤100000
标签


1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #define N 100006 5 using namespace std; 6 struct node{ 7 long long m,n,id; 8 }e[N]; 9 long long kuai[N]; 10 const long long mod=19260817; 11 int siz=332; 12 bool cmp(const node&a,const node&b){ 13 if(kuai[a.n]!=kuai[b.n])return a.n<b.n; 14 return kuai[a.n]&1?a.m<b.m:a.m>b.m; 15 } 16 long long ans[N]; 17 long long ksm(long long a,long long b){ 18 long long ans=1; 19 for(;b;b>>=1){ 20 if(b&1){ 21 ans*=a; 22 ans%=mod; 23 } 24 a*=a; 25 a%=mod; 26 } 27 return ans; 28 } 29 long long f[N],fac[N],inv[N]; 30 void pre(){ 31 fac[0]=1; 32 f[0]=1; 33 for(long long i=1;i<=100000;i++){ 34 fac[i]=fac[i-1]*i%mod; 35 f[i]=f[i-1]*2%mod; 36 } 37 inv[100000]=ksm(fac[100000],mod-2); 38 for(long long i=99999;i>=0;i--){ 39 inv[i]=inv[i+1]*(i+1)%mod; 40 } 41 for(int i=1;i<=1e5;i++) 42 kuai[i]=(i-1)/siz+1; 43 } 44 long long C(long long a,long long b){ 45 if(a<b)return 0; 46 return fac[a]*inv[b]%mod*inv[a-b]%mod; 47 } 48 int main(){ 49 pre(); 50 long long Q; 51 cin>>Q; 52 for(long long i=1;i<=Q;i++){ 53 cin>>e[i].m>>e[i].n; 54 e[i].id=i; 55 } 56 sort(e+1,e+Q+1,cmp); 57 long long l=1,r=0,Ans=0; 58 for(long long i=1;i<=Q;i++){ 59 while(l<e[i].n)l++,Ans=(Ans+(f[l-1]*C(r,l)%mod)%mod)%mod; 60 while(l>e[i].n)Ans=(Ans-(f[l-1]*C(r,l))%mod+mod)%mod,l--; 61 while(r<e[i].m)Ans=(3*Ans-(f[l]*C(r,l))%mod+C(r,0)+mod)%mod,r++; 62 while(r>e[i].m)r--,Ans=((Ans+(f[l]*C(r,l))%mod-C(r,0))%mod)%mod*12840545%mod; 63 ans[e[i].id]=(Ans+mod)%mod; 64 } 65 for(long long i=1;i<=Q;i++){ 66 cout<<ans[i]<<'\n'; 67 } 68 return 0; 69 }
over