hdu 2254(矩阵)
题意:指定v1,v2,要求计算出在t1,t2天内从v1->v2的走法
思路:可以知道由矩阵求,即将其建图A,求矩阵A^t1 + ...... + A^t2. A^n后,/*A.xmap[v1][v2]即是从v1到v2要n步
所以先预处理出A^1 -A^10000的情况,后面再注意下细节,计算即可.
(每条道路走需要花一天的时间,且不能在某个城市停留,且t1=0时的走法数为0)
开始以为只要t1 = 0就输出0,结果不停WA,一直对照别人的代码- -
结果偶然发现这个特例,它喵的我也是醉了,才发现是题意理解错了,好惨...Orz
- 特例:
- Input:
- 1
- 1 1
- 1
- 1 1 0 1
- Ouput:
- 1
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<functional>
using namespace std;
typedef long long ll;
const int mod=2008;
const int maxn=5e5;
map<int,int>has;
struct Maxtri
{
int xmap[30][30];
};
int siz;
Maxtri mat[10005]; Maxtri Mul(Maxtri &a,Maxtri &b)
{
Maxtri c;
for(int i=0; i<siz; i++)
{
for(int j=0; j<siz; j++)
{
c.xmap[i][j]=0;
for(int k=0; k<siz; k++)
{
c.xmap[i][j]+=a.xmap[i][k]*b.xmap[k][j];
c.xmap[i][j]%=mod;
}
}
}
return c;
} int main()
{
int n,u,v,k; int v1,v2,t1,t2;
while(scanf("%d",&n) != EOF)
{
siz = 0;
memset(mat[0].xmap,0,sizeof(mat[0].xmap));
has.clear();
for(int i = 1; i <= n; i++)
{
scanf("%d%d",&u,&v);
if(has.find(u)==has.end())
{
has[u]=siz++;
}
if(has.find(v)==has.end())
{
has[v]=siz++;
}
mat[0].xmap[has[u]][has[v]] ++;
} for(int i=1; i<10001; i++)
mat[i]=Mul(mat[i-1],mat[0]);
scanf("%d",&k);
while(k--)
{
scanf("%d%d%d%d",&v1,&v2,&t1,&t2);
if(has.find(v1)==has.end()||has.find(v2)==has.end() || (!t1 && !t2))
{
printf("0\n");
continue;
}
if(t1 > t2)
swap(t1,t2); int ans=0;
for(int i=t1-1; i<t2; i++)
{
if(i == -1)
continue;
ans= (ans + mat[i].xmap[has[v1]][has[v2]])%mod;
}
printf("%d\n",ans%mod);
}
}
return 0;
}
hdu 2254(矩阵)的更多相关文章
- HDU 2254 奥运(矩阵高速幂+二分等比序列求和)
HDU 2254 奥运(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 2254 奥运 题意: 中问题不解释. 分析: 依据floyd的算法,矩阵的k次方表示这个矩阵走了k步. 所以k ...
- HDU 2254
http://acm.hdu.edu.cn/showproblem.php?pid=2254 矩阵乘法两个经典问题的综合题,还要离散化和处理边界,好题啊好题 题意容易理解错,每一天是独立的,所以根据加 ...
- hdu 2254 奥运
点击打开hdu 2254 思路: 矩阵乘法 分析: 1 题目给定一个有向图,要求t1-t2天内v1-v2的路径的个数 2 根据离散数学里面的可达矩阵的性质,我们知道一个有向图的邻接矩阵的前n次幂的和即 ...
- hdu 4291 矩阵幂 循环节
http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109 ...
- HDU 2254 奥运(矩阵+二分等比求和)
奥运 [题目链接]奥运 [题目类型]矩阵+二分等比求和 &题解: 首先离散化城市,之后就是矩阵快速幂了,但让求的是A^(t1)+A^(t1+1)+...+A^(t2),我先想的是打表,但时间真 ...
- 【矩阵快速幂】之奥运 hdu 2254
1.城市的编号不是从0到n-1,而是随便的一个数字,需要离散化否则不能存相关信息 2.城市数不超过30,也就是说我的方法开矩阵不超过60,但是我残念的一开始以为最多可能有20000个不同城市 血 ...
- HDU 2254 奥运(数论+矩阵)
题目中文的不解释啊. .. 须要注意的就是:离散数学中,有向图的邻接矩阵A表示全部点之间路径长度为1的路径数量,A^n则表示路径长度为n的路径数量.故须要求某两点在(A^t1)~(A^t2)的路径数量 ...
- HDU 2855 (矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855 题目大意:求$S(n)=\sum_{k=0}^{n}C_{n}^{k}Fibonacci(k)$ ...
- HDU 4471 矩阵快速幂 Homework
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...
随机推荐
- 团队作业4——第一次项目冲刺(Alpha版本)11.16
a. 提供当天站立式会议照片一张 举行站立式会议,讨论项目安排: 整理各自的任务汇报: 全分享遇到的困难一起讨论: 讨论接下来的计划: b. 每个人的工作 (有work item 的ID) 1.前两天 ...
- Python 单向循环链表
操作 is_empty() 判断链表是否为空 length() 返回链表的长度 travel() 遍历 add(item) 在头部添加一个节点 append(item) 在尾部添加一个节点 inser ...
- python 异步协程
"""A very simple co-routine scheduler. Note: this is written to favour simple code ov ...
- android context获取目录详解
获取 sqlite系统数据库路径 方式1: ApkInfo apkInfo = new ResourceUtil(context).getApkInfo(); APP_PATH = new Strin ...
- nyoj 仿射密码
仿射密码 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 仿射密码是替换密码的另一个特例,可以看做是移位密码和乘数密码的结合.其加密变换如下: E(m)=(k1*m+k2) ...
- OpenGL中怎么把世界坐标系变成屏幕坐标系
对这个3D坐标手动进行OpenGL的四个变换,得到的结果就是屏幕上的像素坐标.前三个变换(Model, View, Projection)都是4x4矩阵,操作对象是四维向量,所以需要把(100, 10 ...
- MSSQL---extents
一.MSSQLextent分两种: 1. Mixed extent:每个表或索引创建时,MSSQL并不给它分配一个extent,而是在mixed extnet内分配一个页,空间需求扩大时,再分配一个… ...
- Mego(05) - 创建模型
Mego框架使用一组约定来基于CLR类来构建模型.您可以指定其他配置来补充和/或覆盖通过约定发现的内容. 这里需要强调的我们EF不同的是框架只支持数据注释的语法来构建模型,后期只有通过其他接口才能更改 ...
- Python内置函数(61)——eval
英文文档: eval(expression, globals=None, locals=None) The arguments are a string and optional globals an ...
- SpringCloud的EurekaClient : 客户端应用访问注册的微服务(无断路器场景)
演示客户端应用如何访问注册在EurekaServer里的微服务 一.概念和定义 采用Ribbon或Feign方式访问注册到EurekaServer中的微服务.1.Ribbon实现了客户端负载均衡,2. ...