hdu2254 奥运

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2254

题意:题目让我们求得是的可以得到的金牌数量,而和金牌数量=在t1到t2天(包括t1,t2)内从v1到v2共有多少种走法,每天走一步。这个题的坑在于如果v1或者v2城市不存在,还有t1>t2这两种情况都是不可能的,所以直接输出答案为0。

对于题目给我们数据,我们首先需要离散化建图。这里说一下,邻接矩阵我认为可以把它叫做一步可达矩阵,也就是说我们建立一个邻接矩阵,可以直接用M[a][b]看出走一步就可以完成a到b的路线有多少条路线。然后如果将这个矩阵自乘一次就可以得到两步到达可以完成从a到b的路线有多少条路,再乘一次就是可以得到三步可以从a到b的路线有多少条,以此类推,所以对于这道题,我们只需要把走一天和走一万天的矩阵都算出来。然后对于每次查询,我们线性相加就好了。具体看代码……这道题算是学到一个矩阵的姿势了。

//Author: xiaowuga
#include<iostream>
#include<map>
#include<cstring>
#define maxx INT_MAX
#define minn INT_MIN
#define inf 0x3f3f3f3f
#define size 31
#define mod 2008
using namespace std;
typedef long long ll;
map<int,int>li;
int ct=;
struct Mat{
int mat[size][size];
void clear(){
memset(mat,,sizeof(mat));
} Mat operator *(const Mat &m) const{
Mat tmp;
tmp.clear();
for(int k=;k<ct;k++)
for(int i=;i<ct;i++){
if(mat[i][k]==) continue;
for(int j=;j<ct;j++){
if(m.mat[k][j]==) continue;
tmp.mat[i][j]+=mat[i][k]*m.mat[k][j]%mod;
tmp.mat[i][j]%=mod;
}
}
return tmp;
}
}M[];
int main(){
ios::sync_with_stdio(false);cin.tie();
int n;
while(cin>>n){
li.clear();
ct=;
int a,b;
Mat m;
m.clear();
for(int i=;i<n;i++){
cin>>a>>b;
if(li.count(a)==) li[a]=ct++;a=li[a];
if(li.count(b)==) li[b]=ct++;b=li[b];
m.mat[a][b]++;
}
M[]=m;
for(int i=;i<;i++) M[i]=M[i-]*m;
int T,v1,v2,t1,t2;
cin>>T;
while(T--){
cin>>v1>>v2>>t1>>t2;
if(t1>t2||t2==){
cout<<<<endl;continue;
}
int x=-,y=-;
if(li.count(v1)!=) x=li[v1];
if(li.count(v2)!=) y=li[v2];
if(x==-||y==-){
cout<<<<endl;continue;
}
ll sum=;
for(int i=t1;i<=t2;i++){
if(i==) continue;
sum+=M[i].mat[x][y]%mod;
sum%=mod;
}
cout<<sum<<endl;
}
}
return ;
}

hdu2254 奥运 矩阵的应用的更多相关文章

  1. HDU 2254 奥运(矩阵+二分等比求和)

    奥运 [题目链接]奥运 [题目类型]矩阵+二分等比求和 &题解: 首先离散化城市,之后就是矩阵快速幂了,但让求的是A^(t1)+A^(t1+1)+...+A^(t2),我先想的是打表,但时间真 ...

  2. *HDU2254 矩阵乘法

    奥运 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  3. HDU 2254 奥运(矩阵高速幂+二分等比序列求和)

    HDU 2254 奥运(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 2254 奥运 题意:  中问题不解释. 分析:  依据floyd的算法,矩阵的k次方表示这个矩阵走了k步.  所以k ...

  4. HDU 2254 奥运(数论+矩阵)

    题目中文的不解释啊. .. 须要注意的就是:离散数学中,有向图的邻接矩阵A表示全部点之间路径长度为1的路径数量,A^n则表示路径长度为n的路径数量.故须要求某两点在(A^t1)~(A^t2)的路径数量 ...

  5. 【矩阵快速幂】之奥运 hdu 2254

    1.城市的编号不是从0到n-1,而是随便的一个数字,需要离散化否则不能存相关信息 2.城市数不超过30,也就是说我的方法开矩阵不超过60,但是我残念的一开始以为最多可能有20000个不同城市    血 ...

  6. HDU - 2254 奥运 (求等比数列和)

    Description 北京迎来了第一个奥运会,我们的欢呼声响彻中国大地,所以今年的奥运金牌 day day up! 比尔盖兹坐上鸟巢里,手里摇着小纸扇,看的不亦乐乎,被俺们健儿的顽强拼搏的精神深深的 ...

  7. C语言 · 矩阵乘法 · 算法训练

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  8. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  9. CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换

    CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换 三维世界里的旋转(rotate),可以用一个3x3的矩阵描述:可以用(旋转角度float+旋转轴vec3)描述.数学家欧拉证明了这两种形式可 ...

随机推荐

  1. 关于 initWithNibName 和 loadNibNamed 的区别和联系-iPhone成长之路

    转自:http://blog.sina.com.cn/s/blog_7b9d64af01018f2u.html 关于 initWithNibName 和 loadNibNamed 的区别和联系.之所以 ...

  2. nyoj 760 See LCS again

    See LCS again 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 There are A, B two sequences, the number of ele ...

  3. ORACLE用户角色与授权

    --创建一个用户CREATE USER test_user IDENTIFIED BY test_user; --创建一个角色 CREATE ROLE connect2 ; --为角色授权 GRANT ...

  4. python学习笔记(7)--爬虫隐藏代理

    说明: 1. 好像是这个网站的代理http://www.xicidaili.com/ 2. 第2,3行的模块不用导入,之前的忘删了.. 3. http://www.whatismyip.com.tw/ ...

  5. http协议之报文详解

    一. 概述 用于HTTP协议交互的信息被称为HTTP报文.请求端(客户端)的http报文叫做请求报文,响应端的叫做响应报文. 报文,是网络中交换和传输的数据单元,即站点一次性要发送的数据块.报文包含了 ...

  6. [转]Python中函数的值传递和引用传递

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  7. git fork同步是什么意思?

    这篇文章主要介绍了git fork同步是什么意思?fork到了哪里?有什么用?怎样用?跟clone有什么差别?本文就一一解释这些问题,须要的朋友能够參考下 官方文档:http://help.githu ...

  8. leetcode:Pascal&#39;s Triangle

    一.     题目 经典题目,杨辉三角,输入行数.生成杨辉三角的数组. 二.     分析 首先,我们知道有例如以下规律: 1.每一行的第一个数和最后一个数都为1 2.中间的数是上面数和上面数左边的数 ...

  9. 关于 Apache 的 25 个初中级面试题

    关于 Apache 的 25 个初中级面试题 出自:http://blog.jobbole.com/60471/

  10. LodRunner实现大负载测试的四部曲(配置系统参数、配置LR、修改脚本、设置组策略)

    见 http://www.51testing.com/?uid-97659-action-viewspace-itemid-210924 LoadRunner以下简称(LR)是目前业界最流行的压力测试 ...