【HDOJ】2604 Queuing
递推,推得f(n) = f(n-1) + f(n-3) + f(n-4)。然后转换成矩阵相乘,如下
f(n-1) f(n-2) f(n-3) f(n-4) * 1 1 0 0 = f(n) f(n-1) f(n-2) f(n-3)
0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0
从而转化为快速矩阵相乘。
#include <cstdio>
#include <cstring>
#include <cstdlib> #define MATN 4 typedef struct mat_st {
int m[MATN][MATN];
mat_st() {
memset(m, , sizeof(m));
}
} mat_st; int ans[MATN]={,,,};
int mod; mat_st mult_mat(mat_st a, mat_st b) {
mat_st ret;
int i, j, k; for (i=; i<MATN; ++i) {
for (j=; j<MATN; ++j) {
for (k=; k<MATN; ++k)
ret.m[i][j] += a.m[i][k]*b.m[k][j];
ret.m[i][j] %= mod;
}
}
return ret;
} mat_st pow_mat(mat_st a, int n) {
mat_st ret;
int i; for (i=; i<MATN; ++i)
ret.m[i][i] = ; while (n) {
if (n & )
ret = mult_mat(ret, a);
a = mult_mat(a, a);
n >>= ;
}
return ret;
} int main() {
int l;
int i;
mat_st e, a; e.m[][] = e.m[][] = e.m[][] = e.m[][] = e.m[][] = e.m[][] = ;
for (i=; i<MATN; ++i)
a.m[][i] = ans[MATN--i]; while (scanf("%d %d", &l, &mod) != EOF) {
if (l <= )
printf("%d\n", ans[l]%mod);
else {
mat_st c = pow_mat(e, l-);
mat_st r = mult_mat(a, c);
printf("%d\n", r.m[][]);
#ifndef ONLINE_JUDGE
fflush(stdout);
#endif
}
} return ;
}
【HDOJ】2604 Queuing的更多相关文章
- 【HDOJ】4729 An Easy Problem for Elfness
其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...
- 【HDOJ】3337 Guess the number
神一样的题目.简言之,利用手段获得测试用例的第一行,输出结果.很显然利用wa, TLE, OLE等judge status可以获得测试用例.因此,果断Python写一个acm提交机器人.依赖lxml库 ...
- 【HDOJ】【3506】Monkey Party
DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...
- 【HDOJ】【3516】Tree Construction
DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...
- 【HDOJ】【3480】Division
DP/四边形不等式 要求将一个可重集S分成M个子集,求子集的极差的平方和最小是多少…… 首先我们先将这N个数排序,容易想到每个自己都对应着这个有序数组中的一段……而不会是互相穿插着= =因为交换一下明 ...
- 【HDOJ】【2829】Lawrence
DP/四边形不等式 做过POJ 1739 邮局那道题后就很容易写出动规方程: dp[i][j]=min{dp[i-1][k]+w[k+1][j]}(表示前 j 个点分成 i 块的最小代价) $w(l, ...
- 【HDOJ】【3415】Max Sum of Max-K-sub-sequence
DP/单调队列优化 呃……环形链求最大k子段和. 首先拆环为链求前缀和…… 然后单调队列吧<_<,裸题没啥好说的…… WA:为毛手写队列就会挂,必须用STL的deque?(写挂自己弱……s ...
- 【HDOJ】【3530】Subsequence
DP/单调队列优化 题解:http://www.cnblogs.com/yymore/archive/2011/06/22/2087553.html 引用: 首先我们要明确几件事情 1.假设我们现在知 ...
- 【HDOJ】【3068】最长回文
Manacher算法 Manacher模板题…… //HDOJ 3068 #include<cstdio> #include<cstring> #include<cstd ...
随机推荐
- android图片缓存框架Android-Universal-Image-Loader
http://blog.csdn.net/king_is_everyone/article/details/34107081 最近跟同学们做了一个创业项目,其实跟以前做项目不同,以前大多数都是做web ...
- Android 网络框架--Retrofit
1.导入Jar包 compile 'com.google.code.gson:gson:2.8.0' compile 'com.squareup.retrofit2:retrofit:2.1.0' c ...
- ios使用openUrl进行应用跳转
1.拨打电话: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://68979"]]; ...
- 3D游戏引擎一 win32编程
Windows程序一般都等待用户进行一些操作,然后响应并採取行动. 一般来说.对win32的程序的操作都会转换为系统事件队列中的消息,如按键消息WM_KEYDOWN,WM_MOUSECLICK等传递键 ...
- 限制 UITextField 输入长度
限制 UITextField 输入长度 标签(空格分隔): UITextField UITextField 是 iOS 中最经常使用的组件之中的一个.关于它也有各种各样的需求,这些需求是它本身没有提供 ...
- Toast的使用具体解释
Android中提供一种简单的Toast消息提示框机制,能够在用户点击了某些button后,提示用户一些信息,提示的信息不能被用户点击,Toast的提示信息依据用户设置的显示时间后自己主动消失.Toa ...
- App 启动加载广告页面思路
需求 很多app(如淘宝.美团等)在启动图加载完毕后,还会显示几秒的广告,一般都有个跳过按钮可以跳过这个广告,有的app在点击广告页之后还会进入一个广告页面,点击返回进入首页.今天我们就来开发一个广告 ...
- JDK5-自动拆装箱
拆装箱:在基本类型与其对应的引用类型之间转换 装箱:Integer iObj = 5; 拆箱:int i = 5 + iObj; 装箱时,一个字节以内的数据在一个常量池中(小整数的使用频率高),即-1 ...
- (总结)Nginx配置文件nginx.conf中文详解 <转>
转自 http://www.ha97.com/5194.html #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_proc ...
- C#解leetcode 16. 3Sum Closest
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...