我是传送门

这个题首先是先判断是等差还是等比数列

等差的话非常简单:

前后两个数是等差的,举个栗子:

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个数 及 快速幂的更多相关文章

  1. 总结-一本通提高篇&算竞进阶记录

    当一个人看见星空,就再无法忍受黑暗 为了点亮渐渐沉寂的星空 不想就这样退役 一定不会鸽の坑 . 一本通提高篇 . 算竞进阶 . CDQ & 整体二分 . 平衡树 . LCT . 字符串 . 随 ...

  2. $ybt\ 【信息学奥赛一本通】题解目录$

    [信息学奥赛一本通]题解目录 $ \large -> OJ$ $ problem1000 $ \(Answer\) - > $ \large 1000$ $ problem1001 $ \ ...

  3. 2019寒假练题计划——LibreOJ刷题计划 &《信息学奥赛一本通》提高版题目

    目录 2019.1.27 #10082. 「一本通 3.3 例 1」Word Rings 题意 思路 #10083. 「一本通 3.3 例 2」双调路径 题意 思路 #10084. 「一本通 3.3 ...

  4. 【13NOIP提高组】转圈游戏(信息学奥赛一本通 1875)(洛谷 1965)

    题目描述 nn 个小描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号 ...

  5. 信息学竞赛一本通提高版AC题解—例题1.1活动安排

    书中代码有误.书中为sort(a+1,a+n+1,Cmp). // // Created by yuxi on 19-1-13. // /* * * <信息学竞赛一本通-提高版>全部AC解 ...

  6. 【03NOIP普及组】麦森数(信息学奥赛一本通 1925)(洛谷 1045)

    [题目描述] 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它 ...

  7. noip2013提高组day1第一题-转圈游戏——快速幂典型应用

    所谓的快速幂: // 计算 m^n % k 的快速幂算法 int quickpow(int m,int n,int k) { ; ) { ) b = (b*m)%k; n = n >> ; ...

  8. 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− ...

  9. bzoj 3992 [SDOI2015]序列统计——NTT(循环卷积&&快速幂)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3992 有转移次数.模M余数.方案数三个值,一看就是系数的地方放一个值.指数的地方放一个值.做 ...

随机推荐

  1. Navicat 破解版(操作非常简单)

    Navicat 破解版(操作非常简单) 参考这位老哥的博客,之前试过好多个,只有这个是最简单有效的 https://blog.csdn.net/WYpersist/article/details/86 ...

  2. Git 多人协作 以及推送分支

    参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320 当你从远程仓库克隆时,实际上Git自动把本地的仓库的mast ...

  3. spring boot整合spring Data JPA和freemarker

    1.spring Data JPA简介 是一个替代hibernate的一个作用于数据库的框架. 2.整合 1.导入依赖 <dependency> <groupId>org.sp ...

  4. 编写可维护的JavaScript-随笔(二)

    一.注释 1. 单行注释 a)      以两个斜线开始,以行位结束 b)      独占一行的注释,用来解释下一行的代码, c)      注释行之前总有一个空行 d)      缩进层级与下一行代 ...

  5. Python操作SQLite/MySQL/LMDB

    1.概述 1.1前言 最近在存储字模图像集的时候,需要学习LMDB,趁此机会复习了SQLite和MySQL的使用,一起整理在此. 1.2环境 使用win7,Python 3.5.2. 2.SQLite ...

  6. MYSQL中的时间类型

    时间上总共有五中表示方法:它们分别是 time.date.datetime.timestamp和year. time :  “hh:mm:ss”格式表示的时间值,格式显示TIME值,但允许使用字符串或 ...

  7. 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 ...

  8. uni-app结合PHP实现单用户登陆

    单用户登陆,即在一个应用中,同一个用户只能在线登陆一个,一个用户登陆,在其他设备上会被即时挤下线,确认后清空登陆该设备上的登陆装填并退回到登陆界面. uni-app是目前能通过使用vue.js框架只需 ...

  9. GitPython模块

    GitPython模块 安装: pip3 install gitpython Gitpython 操作 import os from git.repo import Repo import json ...

  10. C#的静态类

    静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例 ...