本文出自:http://blog.csdn.net/svitter
题意:
f(x) = K, x = 1
f(x) = (a*f(x-1) + b)%m , x > 1
求出( A^(f(1)) + A^(f(2)) + A^(f(3)) + ...... + A^(f(n)) ) modular P.
1 <= n <= 10^6
0 <= A, K, a, b <= 10^9
1 <= m, P <= 10^9
本题目的关键在于大幂的分解和。。你要这样想,因为不停的求A的幂,所以肯定把算过的保存下来最合适。
打表。(- -)每次都是打表,shit。
把f分解为 fix * k + j 的形式,f就是f(x)的简称。(哈希)
然后关键是fix怎么整,多少合适。我觉得33333合适。为啥?
因为10^9 / 33333 =30000数组不大。然后余数也在33333之内,其好,那就它吧。
然后就用普通的幂模相乘打表就可以f[i] = (f[i-1] * a)mod p,这是个简单的例子,a和p没有实际含义。
这个题目我在做的时候蛋疼到二分法动态打表,但是超空间,因为不停的递归调用造成了超空间。。但是我觉得如果能够实现。。用栈的方法,应该会更加节省时间。因为用到的才计算。如果有不同的意见,请回复我,谢谢。
AC代码:
//============================================================================
// Name : math.cpp
// Author : Vit
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================ #include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath> using namespace std;
#define lln long long int
#define fix 33333 //num
lln n, A, K, a, b, m, P; //A^f f = fix * k + j
// f = dp1 * k + dp2 lln dpk[30001];
lln dpj[33334]; void init()
{
int i, j; //init hash
dpj[1] = A;
dpj[0] = dpk[0] = 1; for(i = 2; i <= 33333; i++)
dpj[i] = (dpj[i-1] * A) % P; dpk[1] = dpj[33333];
for(j = 1; j <= 30000; j ++)
dpk[j] = (dpk[j-1] * dpk[1]) % P;
} void ace()
{
//work pit;
int i, t, c;
lln ans, f;
scanf("%d", &t);
for(c = 1; c <= t; c++)
{
scanf("%lld%lld%lld%lld%lld%lld%lld",&n, &A, &K, &a, &b, &m, &P);
//init
init();
f = K;
ans = 0;
for(i = 0; i < n; i++)
{
ans = (ans + dpk[f/fix] * dpj[f % fix]) % P;
f = (a * f + b) % m;
}
printf("Case #%d: %lld\n", c, ans);
}
} int main()
{
ace();
return 0;
}
[原]sdut2605 A^X mod P 山东省第四届ACM省赛(打表,快速幂模思想,哈希)的更多相关文章
-
[原]sdut2624 Contest Print Server (大水+大坑)山东省第四届ACM省赛
本文出自:http://blog.csdn.net/svitter 原题:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&am ...
-
山东省第四届ACM省赛
排名:http://acm.sdut.edu.cn/sd2012/2013.htm 解题报告:http://www.tuicool.com/articles/FnEZJb A.Rescue The P ...
-
2013年山东省第四届ACM大学生程序设计竞赛-最后一道大水题:Contest Print Server
点击打开链接 2226: Contest Print Server Time Limit: 1 Sec Memory Limit: 128 MB Submit: 53 Solved: 18 [Su ...
-
山东省第四届ACM大学生程序设计竞赛解题报告(部分)
2013年"浪潮杯"山东省第四届ACM大学生程序设计竞赛排名:http://acm.upc.edu.cn/ranklist/ 一.第J题坑爹大水题,模拟一下就行了 J:Contes ...
-
sdut Mountain Subsequences 2013年山东省第四届ACM大学生程序设计竞赛
Mountain Subsequences 题目描述 Coco is a beautiful ACMer girl living in a very beautiful mountain. There ...
-
Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)
Alice and Bob Time Limit: 1000ms Memory limit: 65536K 题目描述 Alice and Bob like playing games very m ...
-
山东省第四届acm解题报告(部分)
Rescue The PrincessCrawling in process... Crawling failed Description Several days ago, a beast ca ...
-
山东省第四届ACM程序设计竞赛部分题解
A : Rescue The Princess 题意: 给你平面上的两个点A,B,求点C使得A,B,C逆时针成等边三角形. 思路: http://www.cnblogs.com/E-star/arch ...
-
Sdut 2409 The Best Seat in ACM Contest(山东省第三届ACM省赛 H 题)(模拟)
题目描述 Cainiao is a university student who loves ACM contest very much. It is a festival for him once ...
随机推荐
-
一步步实现ABAP后台导入EXCEL到数据库【3】
在一步步实现ABAP后台导入EXCEL到数据库[2]里,我们已经实现计划后台作业将数据导入数据库的功能.但是,这只是针对一个简单的自定义结构的导入程序.在实践应用中,面对不同的表.不同的导入文件,我们 ...
-
代理 XP”组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用 sp_configure 来启用“代理 XP”。
新建维护计划的时候遇到下图的报错信息 标题: Microsoft SQL Server Management Studio------------------------------ “代理 XP”组 ...
-
ubuntu下安装python各类运维用模块(以后补充用途)
环境:ubuntu 16.04LTS,python3,python2 已安装:pip3,pip2 注:基于Python自动化运维这本书上介绍的各模块而来 1.python-rrdtool(just f ...
-
window.print() 去掉页眉页脚及打印链接【转载】
页面中添加样式: <style media="print"> @page { size: auto; /* auto is the initial value */ m ...
-
【转】JAVA 8 日期/时间(Date Time)API指南
前言 本来想写下Java 8的日期/时间API,发现已经有篇不错的文章了,那就直接转载吧~ PS:主要内容没变,做了部分修改. 原文链接: journaldev 翻译: ImportNew.com - ...
-
IOS - 本地数据持久化
转:相对复杂的App仅靠内存的数据肯定无法满足,数据写磁盘作持久化存储是几乎每个客户端软件都需要做的.简单如“是否第一次打开”的BOOL值,大 到游戏的进度和状态等数据,都需要进行本地持久化存储.这些 ...
-
IE6 — 你若安好,便是晴天霹雳 [ 乱弹 ]
为什么还有人在用IE6?估计和中国的盗版业有很大关系吧.小白的电脑启不来了,请人重装系统,一张古老的Ghost搞定,IE6便落地生根.今天碰到一例报告说某网站在IE6下丑陋吓人,无心无力去解决,于是来 ...
-
poj2027
#include <stdio.h> int main(){ int n; int a,b; while(~scanf("%d",&n)){ while(n-- ...
-
OCCI处理CHAR类型字符串变量的不同
问题背景: 一个旧应用,原先应用是用proc写的,9i的库,如今应用须要改为使用OCCI,当中有一段查询逻辑:select ... where upper(state)=upper(:1). (此处请 ...
-
WebStorm JavaScript 开发神器
WebStorm 百度百科 http://baike.baidu.com/view/5443872.htm?fr=aladdin