题意很简单,就是让你求这个东西,这个时候你发现,原题????

https://blog.csdn.net/acdreamers/article/details/23039571

哦,只是原来写过的哪一题的C是1,这个是1e18. 想都不用想,直接二项式展开,求等比数列的前n项和。

你会得到第i项(一共k项):

这个时候理所当然的想先用二次剩余求出来那几个用到的东西,a,b,1/sqrt(5)。

1你用快速幂求了一下,一交,tle了。

2 然后发现每个都求快速幂太蠢了,所以又优化优化,优化到除了求分母的逆元需要用到快速幂其他的都可以由上一项推出来,然后再交,又wa了。

3 哦,原来这是等比数列,分母是1-q,如果q是1那不就错了吗?所以特判一下如果q是1,加的就是n*a1,a1是几?你看这个Sn,忽略这个组合数,a1不就和q完全相等吗,是1! 就这样a了。

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define met(a, b) memset(a, b, sizeof(a))
#define rep(i, a, b) for(int i = a; i <= b; i++)
#define bep(i, a, b) for(int i = a; i >= b; i--)
#define pb push_back
#define mp make_pair
#define debug cout << "KKK" << endl
#define ls num*2
#define rs num*2+1
#define re return
using namespace std;
const ll mod = 1e9 + 9;
const double PI = acos(-1);
const ll INF = 2e18+1;
const int inf = 1e9+5;
const double eps = 1e-7;
const int maxn = 1e5 + 5;
// 逆元
// sqrt(5) = 383008016;
// a = (1+sqrt(5))/2 = 691504013;
// b = (1-sqrt(5))/2 = 308495997;
// 1/sqrt(5) = 276601605;
ll A = 691504013, B = 308495997;
ll sqrt5 = 383008016, invsqrt5 = 276601605;
ll qsm(ll a, ll n){
ll res = a%mod, sum = 1;
while(n){
if(n&1) sum = (sum*res)%mod;
res = (res*res)%mod;
n >>= 1;
}
return sum;
} ll fac[maxn], f[maxn], inv[maxn];
ll C(ll m, ll n){
if(m < n) return 0;
if(n == 0 || m == n) return 1;
return fac[m]*inv[n]%mod*inv[m-n]%mod;
}
void init(){
fac[1] = 1;
f[1] = 1;
inv[1] = 1;
for(ll i = 2; i <= 100000; i++){
fac[i] = fac[i-1]*i%mod;
f[i] = (mod - mod/i)*f[mod%i]%mod;
inv[i] = inv[i-1]*f[i]%mod;
}
} ll sac[maxn], sbc[maxn];
int main(){
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
init();
int t; scanf("%d", &t);
while(t--){
ll n, c, k;
scanf("%lld%lld%lld", &n,&c,&k);
// n = 1e18, c = 1e18, k = 1e5;
ll res = qsm(invsqrt5, k);
ll ans = 0, flag = -1;
ll x, y;
ll ac = qsm(A, c), bc = qsm(B, c);
sac[0] = 1, sbc[0] = 1;
sac[1] = ac, sbc[1] = bc;
rep(i, 1, k){
sac[i] = sac[i-1]*ac%mod;
sbc[i] = sbc[i-1]*bc%mod;
}
ll acn = qsm(qsm(A, c), n);
ll bcn = qsm(qsm(B, c), n);
ll invacn = qsm(acn, mod-2);
ll invbcn = qsm(bcn, mod-2);
ll now_acn = qsm(acn, k), now_bcn = 1;
for(ll i = 0; i <= k; i++){
flag *= -1;
ll q = sac[k-i] * sbc[i] % mod;
if(q == 1){
q = (n%mod)*C(k, i) % mod;
ans = (ans + flag*q%mod + mod) % mod;
}
else{
x = (C(k, i)*sac[k-i]%mod) * sbc[i] % mod;
x = (1-(now_acn * now_bcn % mod) + mod) % mod * x % mod;
y = (1 - (sac[k-i] * sbc[i])%mod ) % mod;
y = qsm(y, mod-2);
ans = (ans + flag*x*y%mod + mod)%mod;
}
now_acn = (now_acn * invacn) % mod;
now_bcn = (now_bcn * bcn) % mod;
}
cout << ans*res%mod << endl;
}
return 0;
}

2020 Multi-University Training Contest 1 . Fibonacci Sum 水题改编的更多相关文章

  1. codeforces 577B B. Modulo Sum(水题)

    题目链接: B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. 入门训练 Fibonacci数列 (水题)

    入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n ...

  3. SPOJ 3693 Maximum Sum(水题,记录区间第一大和第二大数)

    #include <iostream> #include <stdio.h> #include <algorithm> #define lson rt<< ...

  4. 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem J. Joke 水题

    Problem J. Joke 题目连接: http://codeforces.com/gym/100714 Description The problem is to cut the largest ...

  5. 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem H. Hometask 水题

    Problem H. Hometask 题目连接: http://codeforces.com/gym/100714 Description Kolya is still trying to pass ...

  6. 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6058 题目: Kanade's sum Time Limit: 4000/2000 MS (J ...

  7. 2015 Multi-University Training Contest 8 hdu 5381 The sum of gcd

    The sum of gcd Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  8. HDU 6058 - Kanade's sum | 2017 Multi-University Training Contest 3

    /* HDU 6058 - Kanade's sum [ 思维,链表 ] | 2017 Multi-University Training Contest 3 题意: 给出排列 a[N],求所有区间的 ...

  9. 2020 Multi-University Training Contest 1 部分题解

    目录 Cookies Distinct Sub-palindromes Fibonacci Sum Finding a MEX Leading Robots Math is Simple Minimu ...

  10. HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

    Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

随机推荐

  1. Linux系统安装&VMware安装三

    第十四步: 开始安装

  2. 前端面试问题整理(html和css部分)

    html5新增属性有哪些? 如何理解语义化标签? 你如何看待前端模块化的? 如何看待前后端分离? 浏览器兼容性问题? 你知道的行内元素.块级元素有哪些? css部分: 1.为什么要初始化css样式? ...

  3. 2021/9/26 Leetcode 两数之和

    题目:给你两个整数 a 和 b ,不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和. int getSum(int a, int b) { while(b != 0){ unsigne ...

  4. Error running 'tm8': Cannot load C:\Users\Administrator\.IntelliJIdea2019.3\system\tomcat\Unnamed_jymes_3\conf\server.xml (系统找不到指定的文件。)

    救命救命,由于脑壳被门夹了去更改了idea的配置,导致重启项目报错!又是给自己挖坑的一天,唉!!! 主要是看报错信息还一直以为是tomcat的问题,然后试了很多方法,比如查看配置的tomcat路径.重 ...

  5. 身为一个java开发人员对目前java开发的一些小小的认识

    为什么要学java? 第一要工作,第二想要高薪 首先身为java开发工作人员你的思想认知程度要搞,思想认知程度决定你的专业技能水平 JavaSE工程师     B/S 架构   ----    浏览器 ...

  6. Java 获取【.jar】文件里的资源文件

    获取jar文件里的图片等文件时,会发现使用相对路径不行了. 因为打包后的jar文件,在获取路径时稍有不同. 下面是获取jar文件中图片的例子: 1 Resource[] resources = new ...

  7. vue+element el-table有关Checkbox的一些功能

    在做项目的时候会碰到一些表格操作的问题其中我归整了一下有关于多选功能的一些记录 一:默认选中其中一行 <el-table class="editTable" :data=&q ...

  8. git 切换分支 初始化

    常见的错误 报错内容基本都是error: failed to push some refsto'远程仓库地址'. 导致产生原因 我们想把自己本地的某个项目关联到远程仓库并推送上去 操作 本地项目-&g ...

  9. Floyd算法求最短路径

    floyd算法用于求图中各个点到其它点的最短路径,无论其中经过多少个中间点.该算法的核心理念是基于动态规划, 不断更新最短距离,遍历所有的点. 知识基础:图的邻接矩阵表示: 如图是一个简单图,从A开始 ...

  10. 通过Windows定时任务执行Python脚本给钉钉群发送消息

    前提:已经存在有成功发送钉钉群机器人消息的python脚本,参考上一篇Python调用钉钉群机器人发送群消息 Windows定时任务设置 1.本机是Win7系统:控制面板->系统和安全-> ...