[codeforces821E]Okabe and El Psy Kongroo

题意:(0,0)走到(k,0),每一部分有一条线段作为上界,求方案数。

解题关键:dp+矩阵快速幂,盗个图,注意ll

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<iostream>
 7 using namespace std;
 8 typedef long long ll;
 9 const ll mod=1e9+7;
10 struct mat{
11     ll m[17][17];
12 }A;
13
14 mat mul(mat &A,mat &B,ll len){
15     mat C={0};
16     for(int i=0;i<=len;i++){
17         for(int k=0;k<=len;k++){
18             for(int j=0;j<=len;j++){
19                 C.m[i][j]=(C.m[i][j]+A.m[i][k]*B.m[k][j]%mod+mod)%mod;
20             }
21         }
22     }
23     return C;
24 }
25
26 mat mod_pow(mat A,ll n,ll len){
27     mat B={0};
28     for(int i=0;i<=len;i++) B.m[i][i]=1;
29     while(n>0){
30         if(n&1) B=mul(B,A,len);
31         A=mul(A,A,len);
32         n>>=1;
33     }
34     return B;
35 }
36
37 int main(){
38     ll n,k;
39     ios::sync_with_stdio(0);
40     cin.tie(0);
41     cout.tie(0);
42     for(int i=0;i<16;i++){
43         int j=i-1>=0?i-1:0;
44         for(;j<=i+1&&j<16;j++){
45             A.m[i][j]=1;
46         }
47     }
48     mat C;
49     cin>>n>>k;
50     mat B={0};
51     B.m[0][0]=1;
52     ll cnt=0;
53     for(int i=0;i<n&&cnt<k;i++){
54         ll a,b,c;
55         cin>>a>>b>>c;
56         if(b>k) b=k;
57         cnt+=b-a;
58         C=mod_pow(A, b-a, c);
59         B=mul(B, C, c);
60         for(ll j=c+1;j<16;j++) B.m[j][0]=0;//这句话不加也可以,为什么?
61     }
62     cout<<(B.m[0][0]+mod)%mod<<"\n";
63     return 0;
64 }
时间: 2024-10-16 11:40:11

[codeforces821E]Okabe and El Psy Kongroo的相关文章

Codeforce821E Okabe and El Psy Kongroo

E. Okabe and El Psy Kongroo time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Okabe likes to take walks but knows that spies from the Organization could be anywhere; that's why he wants to k

Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo(矩阵)

题目链接:Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo 题意: 在一个二维方格子里有n条线段,有三种走法 (x?+?1,?y?+?1), (x?+?1,?y), or (x?+?1,?y?-?1). 现在要求每次都要在线段下行走,问你有多少种走法, 可以从(0,0)到(k,0). 题解: 考虑dp f[i][j]=f[i-1][j]+f[i-1][j+1]+f[i-1][j-1]. 由于k比较大c比较小,可以考虑用矩阵来优化

CF821 E. Okabe and El Psy Kongroo 矩阵快速幂

LINK 题意:给出$n$条平行于x轴的线段,终点$k$坐标$(k <= 10^{18})$,现在可以在线段之间进行移动,但不能超出两条线段的y坐标所夹范围,问到达终点有几种方案. 思路:刚开始以为限制只是到达线段上就必须沿线段走,后来才发现是要求走y坐标所夹范围,那么就简单多了,很容易看出是个递推形DP,然而数据量有点大,k为10的18次,一般转移显然不可行.由于是个递推,而且y坐标最大也只有15,故使用矩阵优化递推复杂度即可. /** @Date : 2017-07-04 16:06:18

cf 821E Okabe and El Psy Kongroo(矩阵快速幂)

链接:http://codeforces.com/problemset/problem/821/E 分析:由于有边界而且不同段边界还不同,直接算是不行的..k是1e18,dp也不行..用一个16维的向量表示某一列16个位置可能的种类数,到下一列的转移矩阵容易得到,而且在同一段里转移矩阵一样,直接用快速幂算出这一段结束的向量,然后继续推下一段结束的向量.注意特殊情况的处理. 1 #include<iostream> 2 #include<cstring> 3 using namesp

Codeforces 821E Okabe and El Psy Kongroo

题意:我们现在位于(0,0)处,目标是走到(K,0)处.每一次我们都可以从(x,y)走到(x+1,y-1)或者(x+1,y)或者(x+1,y+1)三个位子之一.现在一共有N段线段,每条线段都是平行于X轴的.我们如果此时x是在这段线段之内的话,我们此时走到的点(x,y)需要满足0<=y<=Ci.现在保证一段线段的终点,一定是下一段线段的起点.问我们从起点走到终点的行走方案数. dp方程比较显然:dp[i][j]+=dp[i-1][j]+dp[-1][j-1]+dp[i-1][j+1] 之后构造一

Codeforces Round #420 (Div. 2) A-E

本来打算划划水洗洗睡了,突然听到这次的主人公是冈部伦太郎 石头门(<steins;gate>)主题的比赛,岂有不打之理! 石头门真的很棒啊!人设也好剧情也赞曲子也特别好听. 推荐http://music.163.com/#/m/song?id=26259014&userid=115264555 (强行跑题) Okabe and Future Gadget Laboratory O(n^4)暴力妥妥的 1 #include<iostream> 2 #include<al

Codeforces Round #420 (Div. 2)

/****************************************************************************************************************** 因为发现不敲题会变蠢...所以没事还是做两道题吧.... 很久没做过题然后发现C和E全都是因为没用LL给卡住了......  我真的是太蠢了 ***************************************************************

Codeforces Round #420 E

Okabe and El Psy Kongroo 题意:有n条平行x轴的线段,每条线段的起点为(ai,ci),终点为(bi,ci),且满足ai=b(i-1),从起点出发,每次可以往3个方向走,分别为 (x?+?1,?y?+?1), (x?+?1,?y), or (x?+?1,?y?-?1),且走的过程必须满足0>=y>=ci,求走到(k,0)有多少种走法 思路:dp+矩阵快速幂, dp[i][0]=dp[i-1][0]+dp[i-1][1] ........... dp[i][j]=dp[i-

0ops CTF/0CTF writeup

0×00 0CTF『第一届0ops信息安全技术挑战赛,即0ops Capture The Flag,以下简称0CTF. 0CTF由上海交通大学网络信息中心和上海市信息安全行业协会指导,由上海交通大学信息网络安全协会承办,是2014信息安全技能竞赛校园赛首站.0CTF注册与参赛地址为http://ctf.0ops.net. 比赛时间为北京时间2014年3月1日至2日,每天7时至23时,共32小时.』 看官方微博,这个比赛本来是面向上交校内的,就是校外可以做题但是不发奖,后来也给校外发奖了,整体感觉