信息学奥赛一本通 提高篇 序列第k个数 及 快速幂
这个题首先是先判断是等差还是等比数列
等差的话非常简单:
前后两个数是等差的,举个栗子:
3 6 9 12
这几个数,(我感觉 1 2 3 4并说明不了什么)
每次都加3嘛,很容易看出,第一个数是3 * 1,第二个是3 * 2....以此类推
第k个数 = (第2个数 - 第1个数) * k ;
(z - y) * k %
% 200907 的原因是题目要求
但是这样并不能过
hack一下
4 7 10 13
用原先的公式:
(7 - 4) * 4 % 200907 = 12;
明显不对啊
但是我们将序列每个都减一
就变成了: 3 6 9 12
熟悉滴感觉,但我们并不需要真的都减一,只需要加上差就可以了
x + (z - y) * (k - ) %
这个和我说的有些出入,但仔细想想就会发现是一样的
等比的话稍微难一点:
前后两个数是等比的,举个栗子:
3 6 18 27
第一个数是3^1
第二个数是3^2
第三个数是3^3
emmm,好像也很简单
这数据 不能乘10^9次吧
100000000000000% 超时
快速幂不错
快速幂怎么写呢
我在这里说一种非递归写法(其实本蒟蒻根本不明白递归的实现)
把幂次拆成二进制数,只需要乘log n 次,非常优秀的算法
比如 2 ^ 10 的二进制是 2的1010次幂
ans 就是 2 ^ 2 * 2 ^ 8 ;
当然数学上来讲 2 ^ 2 * 2 ^ 8 = 2 ^ (2 + 10)
long long ksm(long long a,long long b,long long n){//a是底数,b是幂数,n是mod数
long long ans = ;
while(b){//等价于while(b != 0) ,dalao勿喷,讲给我这样的蒟蒻听
if ( b & ){//b & 1 等价于 b % 2 == 1
ans *= a;//是的话乘起来
ans %= ;//随时取膜性质
/* code */
}
a *= a;//下一位
a %= ;//膜
b >>= ;//右移一位 等价于 b /= 2;
}
return ans % ;
}
然后问题还是来了
20 920 42320
这个显然是等比数列920 : 20 = 46
但是怎么用快速幂呢
20 = 1 * 20
920 = 46 * 20
42320 = 46 * 46 * 20
那么20 920 42320 和1 45 2025什么区别呢
就是前者每一项是后者20倍
求出后者就能求出前者啦
这个代码不需要解释了吧
#include <bits/stdc++.h>
using namespace std;
long long ksm(long long a,long long b,long long n){
long long ans = ;
while(b){
if ( b & ){
ans *= a;
ans %= ;
/* code */
}
a *= a;
a %= ;
b >>= ;
}
return ans % ;
} int main()
{
long long n;
cin>>n;
for (long long i = ; i < n; ++i)
{
long long x, y, z, k;
cin>>x>>y>>z>>k;
if (z - y == y - x)
{
cout<<x + (z - y) * (k - ) % <<endl;
/* code */
}
else{
long long yy = k / * ;
yy /= x;
yy *= y % ;
cout/*<<y / x<<' '<<k - 1<<" "*/<<ksm(y / x , k - , ) * x % <<endl;
// cout<<ppw(x , yy , 200907 , k , y / x)<<endl;
}
/* code */
}
return ;
}
信息学奥赛一本通 提高篇 序列第k个数 及 快速幂的更多相关文章
- 总结-一本通提高篇&算竞进阶记录
当一个人看见星空,就再无法忍受黑暗 为了点亮渐渐沉寂的星空 不想就这样退役 一定不会鸽の坑 . 一本通提高篇 . 算竞进阶 . CDQ & 整体二分 . 平衡树 . LCT . 字符串 . 随 ...
- $ybt\ 【信息学奥赛一本通】题解目录$
[信息学奥赛一本通]题解目录 $ \large -> OJ$ $ problem1000 $ \(Answer\) - > $ \large 1000$ $ problem1001 $ \ ...
- 2019寒假练题计划——LibreOJ刷题计划 &《信息学奥赛一本通》提高版题目
目录 2019.1.27 #10082. 「一本通 3.3 例 1」Word Rings 题意 思路 #10083. 「一本通 3.3 例 2」双调路径 题意 思路 #10084. 「一本通 3.3 ...
- 【13NOIP提高组】转圈游戏(信息学奥赛一本通 1875)(洛谷 1965)
题目描述 nn 个小描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号 ...
- 信息学竞赛一本通提高版AC题解—例题1.1活动安排
书中代码有误.书中为sort(a+1,a+n+1,Cmp). // // Created by yuxi on 19-1-13. // /* * * <信息学竞赛一本通-提高版>全部AC解 ...
- 【03NOIP普及组】麦森数(信息学奥赛一本通 1925)(洛谷 1045)
[题目描述] 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它 ...
- noip2013提高组day1第一题-转圈游戏——快速幂典型应用
所谓的快速幂: // 计算 m^n % k 的快速幂算法 int quickpow(int m,int n,int k) { ; ) { ) b = (b*m)%k; n = n >> ; ...
- 2018.12.31 bzoj3992: [SDOI2015]序列统计(生成函数+ntt+快速幂)
传送门 生成函数简单题. 题意:给出一个集合A={a1,a2,...as}A=\{a_1,a_2,...a_s\}A={a1,a2,...as},所有数都在[0,m−1][0,m-1][0,m− ...
- bzoj 3992 [SDOI2015]序列统计——NTT(循环卷积&&快速幂)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3992 有转移次数.模M余数.方案数三个值,一看就是系数的地方放一个值.指数的地方放一个值.做 ...
随机推荐
- Navicat 破解版(操作非常简单)
Navicat 破解版(操作非常简单) 参考这位老哥的博客,之前试过好多个,只有这个是最简单有效的 https://blog.csdn.net/WYpersist/article/details/86 ...
- Git 多人协作 以及推送分支
参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320 当你从远程仓库克隆时,实际上Git自动把本地的仓库的mast ...
- spring boot整合spring Data JPA和freemarker
1.spring Data JPA简介 是一个替代hibernate的一个作用于数据库的框架. 2.整合 1.导入依赖 <dependency> <groupId>org.sp ...
- 编写可维护的JavaScript-随笔(二)
一.注释 1. 单行注释 a) 以两个斜线开始,以行位结束 b) 独占一行的注释,用来解释下一行的代码, c) 注释行之前总有一个空行 d) 缩进层级与下一行代 ...
- Python操作SQLite/MySQL/LMDB
1.概述 1.1前言 最近在存储字模图像集的时候,需要学习LMDB,趁此机会复习了SQLite和MySQL的使用,一起整理在此. 1.2环境 使用win7,Python 3.5.2. 2.SQLite ...
- MYSQL中的时间类型
时间上总共有五中表示方法:它们分别是 time.date.datetime.timestamp和year. time : “hh:mm:ss”格式表示的时间值,格式显示TIME值,但允许使用字符串或 ...
- SAP技术 - How to create a CDS redirect view for a given database table
Scenario Suppose we have a database table A, and then we create a CDS redirect view B for it, then e ...
- uni-app结合PHP实现单用户登陆
单用户登陆,即在一个应用中,同一个用户只能在线登陆一个,一个用户登陆,在其他设备上会被即时挤下线,确认后清空登陆该设备上的登陆装填并退回到登陆界面. uni-app是目前能通过使用vue.js框架只需 ...
- GitPython模块
GitPython模块 安装: pip3 install gitpython Gitpython 操作 import os from git.repo import Repo import json ...
- C#的静态类
静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例 ...