HDU 2254 奥运(数论+矩阵)
题目中文的不解释啊。
。。
须要注意的就是:离散数学中,有向图的邻接矩阵A表示全部点之间路径长度为1的路径数量,A^n则表示路径长度为n的路径数量。故须要求某两点在(A^t1)~(A^t2)的路径数量之和。
奥运
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2251 Accepted Submission(s): 572
比尔盖兹坐上鸟巢里,手里摇着小纸扇,看的不亦乐乎。被俺们健儿的顽强拼搏的精神深深的感动了。
反正我的钱也多的没地方放了,他对自己说,我自己也来举办一个奥运会。看谁的更火。
只是他的奥运会非常特别:
1 參加人员必须是中国人;
2 至少会加法运算(由于要计算本人获得的金牌数)
他知道中国有非常多的名胜古迹。他知道自己在t1 到 t2天内不可能把全部的地方都玩遍,所以他决定指定两个地方v1,v2,假设參赛员能计算出在t1到t2天(包含t1,t2)内从v1到v2共同拥有多少种走法(每条道路走须要花一天的时间,且不能在某个城市停留,且t1=0时的走法数为0),那么他就会获得对应数量的金牌,城市的总数<=30,两个城市间能够有多条道路
,每条都视为是不同的。
输入一个数字n表示有n条道路 0<n<10000
接下来n行每行读入两个数字 p1。p2 表示城市p1到p2有道路,并不表示p2到p1有道路 (0<=p1,p2<2^32)
输入一个数字k表示有k个參赛人员
接下来k行。每行读入四个数据v1,v2,t1,t2 (0<=t1,t2<10000)
6 1 2 1 3 2 3 3 2 3 1 2 1 3 1 2 0 0 1 2 1 100 4 8 3 50
0 1506 0
- </pre><pre style="font-family: 'Courier New'; background-color: rgb(244, 251, 255);"><pre name="code" class="cpp">#include <algorithm>
- #include <iostream>
- #include <stdlib.h>
- #include <string.h>
- #include <iomanip>
- #include <stdio.h>
- #include <string>
- #include <queue>
- #include <cmath>
- #include <stack>
- #include <map>
- #include <set>
- #define eps 1e-10
- ///#define M 1000100
- #define LL __int64
- ///#define LL long long
- ///#define INF 0x7ffffff
- #define INF 0x3f3f3f3f
- #define PI 3.1415926535898
- #define zero(x) ((fabs(x)<eps)?
- 0:x)
- #define mod 2008
- const int maxn = 210;
- using namespace std;
- struct matrix
- {
- int f[31][31];
- };
- matrix p[10001];
- map<int, int>mp;
- matrix mul(matrix a, matrix b, int n)
- {
- matrix c;
- memset(c.f, 0, sizeof(c.f));
- for(int i = 0; i < n; i++)
- {
- for(int j = 0; j < n; j++)
- {
- for(int k = 0; k < n; k++) c.f[i][j] += a.f[i][k]*b.f[k][j];
- c.f[i][j] %= mod;
- }
- }
- return c;
- }
- matrix pow_mod(matrix a, int b, int n)
- {
- matrix s;
- memset(s.f, 0 , sizeof(s.f));
- for(int i = 0; i < n; i++) s.f[i][i] = 1;
- while(b)
- {
- if(b&1) s = mul(s, a, n);
- a = mul(a, a, n);
- b >>= 1;
- }
- return s;
- }
- matrix Add(matrix a,matrix b, int n)
- {
- matrix c;
- for(int i = 0; i < n; i++)
- {
- for(int j = 0; j < n; j++)
- {
- c.f[i][j] = a.f[i][j]+b.f[i][j];
- c.f[i][j] %= mod;
- }
- }
- return c;
- }
- int main()
- {
- int n, m;
- while(scanf("%d",&n)!=EOF)
- {
- int u, v;
- int ans = 0;
- mp.clear();
- memset(p[0].f, 0, sizeof(p[0].f));
- for(int i = 0; i < n; i++)
- {
- scanf("%d %d",&u, &v);
- if(mp.find(u) == mp.end()) mp[u] = ans++;
- if(mp.find(v) == mp.end()) mp[v] = ans++;
- p[0].f[mp[u]][mp[v]] ++;
- }
- for(int i = 1; i < 10001; i++) p[i] = mul(p[i-1], p[0], ans);
- scanf("%d",&m);
- int t1, t2, v1, v2;
- while(m--)
- {
- scanf("%d %d %d %d",&v1, &v2, &t1, &t2);
- if(t1 > t2) swap(t1,t2);
- if(mp.find(v1) == mp.end() || mp.find(v2) == mp.end() || t1 == 0 && t2 == 0)
- {
- puts("0");
- continue;
- }
- int sum = 0;
- for(int i = t1-1; i < t2; i++)
- {
- if(i == -1) continue;
- sum += p[i].f[mp[v1]][mp[v2]]%mod;
- }
- printf("%d\n",sum%mod);
- ///cout<<(sum%mod)<<endl;
- }
- }
- return 0;
- }
HDU 2254 奥运(数论+矩阵)的更多相关文章
- HDU 2254 奥运(矩阵高速幂+二分等比序列求和)
HDU 2254 奥运(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 2254 奥运 题意: 中问题不解释. 分析: 依据floyd的算法,矩阵的k次方表示这个矩阵走了k步. 所以k ...
- hdu 2254 奥运
点击打开hdu 2254 思路: 矩阵乘法 分析: 1 题目给定一个有向图,要求t1-t2天内v1-v2的路径的个数 2 根据离散数学里面的可达矩阵的性质,我们知道一个有向图的邻接矩阵的前n次幂的和即 ...
- HDU 2254 奥运(矩阵+二分等比求和)
奥运 [题目链接]奥运 [题目类型]矩阵+二分等比求和 &题解: 首先离散化城市,之后就是矩阵快速幂了,但让求的是A^(t1)+A^(t1+1)+...+A^(t2),我先想的是打表,但时间真 ...
- HDU - 2254 奥运 (求等比数列和)
Description 北京迎来了第一个奥运会,我们的欢呼声响彻中国大地,所以今年的奥运金牌 day day up! 比尔盖兹坐上鸟巢里,手里摇着小纸扇,看的不亦乐乎,被俺们健儿的顽强拼搏的精神深深的 ...
- hdu 2254 奥运(邻接矩阵应用)
Problem Description 北京迎来了第一个奥运会,我们的欢呼声响彻中国大地,所以今年的奥运金牌 day day up! 比尔盖兹坐上鸟巢里,手里摇着小纸扇,看的不亦乐乎,被俺们健儿的顽强 ...
- hdu 2865 Polya计数+(矩阵 or 找规律 求C)
Birthday Toy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU.1575 Tr A ( 矩阵快速幂)
HDU.1575 Tr A ( 矩阵快速幂) 点我挑战题目 题意分析 直接求矩阵A^K的结果,然后计算正对角线,即左上到右下对角线的和,结果模9973后输出即可. 由于此题矩阵直接给出的,题目比较裸. ...
- hdu 3117 Fibonacci Numbers 矩阵快速幂+公式
斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ...
- 【矩阵快速幂】之奥运 hdu 2254
1.城市的编号不是从0到n-1,而是随便的一个数字,需要离散化否则不能存相关信息 2.城市数不超过30,也就是说我的方法开矩阵不超过60,但是我残念的一开始以为最多可能有20000个不同城市 血 ...
随机推荐
- Mining 任务分类
1.预测任务: 根据其它属性的值预测特定属性的值. 2.描述性任务: 发现数据之间潜在的关联关系.
- Qt5.3.0 for android windows平台下搭建及demo(虫子的博客)
----我的生活,我的点点滴滴!! 部门领导突然心血来潮,想在android平台上做应用,但是我们大多产品属于嵌入式(本吊只负责写写应用,苦比的被强行顶过来搞这,由于这还得领导吵了一架,架虽然吵完了, ...
- Delphi XE6 试用Android视频采集
FMX支持视频采集,具体见FMX.Media,提供了很类支持音频.视频的处理. 按帮助文档,用Note3做了测试,结果,效率太低,不可用. 具体可查询帮助Video Capturing一节,我就是按这 ...
- python手记(51)
python通过声音将文件内容隐藏,实现原理是将文件的内容分别插入到声音文件的不同位置中做为当次采样的数据,目前是对英文文本文档加解密 #!/usr/bin/env python # -*- codi ...
- ArcGIS学习推荐基础教程摘录
###########-------------------摘录一--------------------------########### ***************************** ...
- 网易云课堂_程序设计入门-C语言_第三周:循环_2数字特征值
2 数字特征值(5分) 题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作 ...
- Android 主线程和线程之间相互发送消息
通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...
- UVA LA 7146 2014上海亚洲赛(贪心)
option=com_onlinejudge&Itemid=8&page=show_problem&category=648&problem=5158&mosm ...
- Java 类加载与初始化
Java系列笔记(1) - Java 类加载与初始化 目录 类加载器 动态加载 链接 初始化 示例 类加载器 在了解Java的机制之前,需要先了解类在JVM(Java虚拟机)中是如何加载的,这对后面理 ...
- 用PS绿化版出现“请卸载并重新安装该产品”的解决方法
下载了一个CS6版本的绿化版PS,解压后发现用不了,因为是不用安装的,所以这个提示明显是没用的. 我把64位破解文件 amtlib.dll和32位破解文件 amtlib.dll都放进去试了一下,结果行 ...