hdu 1005 简单题
今早水出的第一道题,带着情绪做的,竟然1Y了,确实惊奇。这道简单的线性递推取模,直接递推是不行的,因为n的规模达到了100,000,000,要么超时要么超内存。可以用矩阵快速幂来搞,根据题意构建出对应的矩阵后即可(第一次写的,用结构体来进行矩阵相乘运算),代码如下:
#include<cstdio>
struct matrix{
int a,b,c,d;
matrix(int _a=, int _b=, int _c=, int _d=) {
a=_a; b=_b; c=_c; d=_d;
}
matrix operator *(const matrix &m2){
return matrix((a*m2.a%+b*m2.c%)%, (a*m2.b%+b*m2.d%)%, (c*m2.a%+d*m2.c%)%, (c*m2.b%+d*m2.d%)%);
}
matrix square(){
return matrix((a*a%+b*c%)%, b*(a+d)%, c*(a+d)%, (b*c%+d*d%)%);
}
};
int calcu(matrix m, int p)
{
matrix ans(,,,);
while(p){
if(p&) ans= ans*m;
m= m.square();
p>>=;
}
return (ans.a+ans.c)%;
}
int main()
{
int a,b,n;
while(scanf("%d%d%d",&a,&b,&n),a){
if(n<=) puts("");
else printf("%d\n", calcu(matrix(a,,b,),n-));
}
return ;
}
实际上,这道题还有更优的做法,就是找循环周期,因为f[n]只与前两个有关,而且是模7,所以它的循环周期是7*7-1=48(为何这样算我也不知如何证明,留待以后再想),下面也附上AC代码:
#include<cstdio>
int f[]= {,,}; int main()
{
int a,b,n,i;
while(scanf("%d%d%d",&a,&b,&n), a){
for(i=; i<=; ++i)
f[i]= (a*f[i-]+b*f[i-])%;
f[]= f[];
printf("%d\n",f[n%]);
}
return ;
}
hdu 1005 简单题的更多相关文章
- HDU 1753 大明A+B(字符串模拟,简单题)
简单题,但要考虑一些细节: 前导0不要,后导0不要,小数长度不一样时,有进位时,逆置处理输出 然后处理起来就比较麻烦了. 题目链接 我的代码纯模拟,把小数点前后分开来处理,写的很繁杂,纯当纪念——可怜 ...
- (hdu 简单题 128道)平方和与立方和(求一个区间的立方和和平方和)
题目: 平方和与立方和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- HDU 6106 17多校6 Classes(容斥简单题)
Problem Description The school set up three elective courses, assuming that these courses are A, B, ...
- HDU 6463.超级无敌简单题-卡边界的暴力 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
超级无敌简单题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- HDU 1005(周期问题)
HDU 1005 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descript ...
- acm.njupt 1001-1026 简单题
点击可展开上面目录 Acm.njupt 1001-1026简单题 第一页许多是简单题,每题拿出来说说,没有必要,也说不了什么. 直接贴上AC的代码.初学者一题题做,看看别人的AC代码,寻找自己的问题. ...
- 【转载】 HDU 动态规划46题【只提供思路与状态转移方程】
1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数) ...
- BZOJ 2683: 简单题
2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 913 Solved: 379[Submit][Status][Discuss] ...
- 【BZOJ-1176&2683】Mokia&简单题 CDQ分治
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 821[Submit][St ...
随机推荐
- csdn在线编程里面的一个排列组合题
是csdn在线编程里面的一个问题 回文字符串是指从左到右和从右到左相同的字符串,现给定一个仅由小写字母组成的字符串,你可以把它的字母重新排列,以形成不同的回文字符串. 输入:非空仅由小写字母组成的字符 ...
- VS2015+Windows 10下配置opencv3.0
博客园样式换了,原先的文章排版太乱了,新发一篇 ##0. 安装 opencv 3.0 首先去官网下载安装包(其实是个压缩包),释放到随便的一个路径里面为了方便描述,下面把这个路径称为 cvPath. ...
- WPFの布局中Panel的选用
一.Canvas 这个容器能够对元素做准确的定位,但同时也是其创建的页面不够灵活. 二.StackPanel 最大的优点是:他会顺序的对他的子元素进行排列显示.(没有任何附加属性) 要注意的是:他有两 ...
- CAShapeLayer 与贝塞尔曲线
一 CAShapeLayer 简介 1,CAShapeLayer继承至CALayer,可以使用CALayer的所有属性 2,CAShapeLayer需要与贝塞尔曲线配合使用才有意义:单独使用毫无意义 ...
- SqlSever基础 delete 删除一个表中的所有数据
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- jquery之html(),text()方法详解
一:html() html()函数用于设置或返回当前jQuery对象所匹配的DOM元素内的html内容. 该函数的用途相当于设置或获取DOM元素的innerHTML属性值. 该函数属于jQuery对象 ...
- linux设置tomcat开机自启动
本文假设jdk环境安装成功,如何安装JDK请参考这个链接: http://www.cnblogs.com/yoyotl/p/5395208.html 1. 下载apache的安装包,例如本例下载了ap ...
- eclipse启动报错eclipse failed to create the java virutal machine
早上一来,我的eclipse就无法启动了,错误就是这句话: eclipse failed to create the java virutal machine 直译就是eclipse无法创建JAVA虚 ...
- sql默认启动密码
首先启动sqlplus输入用户名:sqlplus / as sysdba密码空缺如果用户被锁定,记得加上SQL> alter user dbsnmp account unlock; User a ...
- const变量赋值报错分析
const变量赋值报错分析 const变量赋值报错 从变量到常量的赋值是合法C++的语法约定的, 如从char 到const char顺畅: 但从char **到 const char **编译器就会 ...