首页 > 其他分享 >洛谷 P4451 [国家集训队] 整数的lqp拆分

洛谷 P4451 [国家集训队] 整数的lqp拆分

时间:2024-04-21 15:14:03浏览次数:15  
标签:typedef P4451 洛谷 ll lqp sqrt ans frac mod

洛谷传送门

设 \(G\) 为斐波那契数列的生成函数,显然有 \(F = F \times G + 1\)。那么 \(F = \frac{1}{1 - G} = 1 + \frac{x}{1 - 2x - x^2}\)。问题是如何展开 \(\frac{x}{1 - 2x - x^2}\)。

因为 \(\frac{1}{1 - ax} = \sum\limits_{i \ge 0} (ax)^i\),所以考虑设 \(\frac{x}{1 - 2x - x^2} = \frac{A}{1 - ax} + \frac{B}{1 - bx} = \frac{A + B - (Ab + Ba)x}{1 - (a + b)x + abx^2}\)。对比系数后解得 \(A = \frac{\sqrt 2}{4}, B = -\frac{\sqrt 2}{4}, a = 1 + \sqrt{2}, b = 1 - \sqrt{2}\)。那么答案即为:

\[\frac{\sqrt 2}{4} ((1 + \sqrt 2)^n - (1 - \sqrt 2)^n) \]

这样我们得到了求一个封闭形式的生成函数的某一次项的系数的通法。

code
// Problem: P4451 [国家集训队] 整数的lqp拆分
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P4451
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 10050;
const ll mod = 1000000007, B = 59713600;
const ll inv4 = (mod + 1) / 4;

inline ll qpow(ll b, ll p) {
	ll res = 1;
	while (p) {
		if (p & 1) {
			res = res * b % mod;
		}
		b = b * b % mod;
		p >>= 1;
	}
	return res;
}

char s[maxn];

void solve() {
	scanf("%s", s);
	ll n = 0;
	for (int i = 0; s[i]; ++i) {
		n = (n * 10 + s[i] - '0') % (mod - 1);
	}
	ll ans = qpow((1 + B) % mod, n);
	ans = (ans - qpow((1 - B + mod) % mod, n) + mod) % mod;
	ans = ans * B % mod * inv4 % mod;
	printf("%lld\n", ans);
}

int main() {
	int T = 1;
	// scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:typedef,P4451,洛谷,ll,lqp,sqrt,ans,frac,mod
From: https://www.cnblogs.com/zltzlt-blog/p/18148948

相关文章

  • [题解] [洛谷 P1174] 打砖块
    [洛谷P1174]打砖块题目描述有\(n\)行\(m\)列的砖块和\(k\)发子弹,每个砖块都有一个得分,每次可以用一发子弹打碎某一列最下面的砖块并得到相应的得分。有的砖块在打碎后可以获得一发额外子弹的奖励。求该游戏的最大得分。输入格式第一行有\(3\)个正整数,\(n,m,k\)。......
  • [题解] [洛谷 P1174] 打砖块
    [洛谷P1174]打砖块题目描述有\(n\)行\(m\)列的砖块和\(k\)发子弹,每个砖块都有一个得分,每次可以用一发子弹打碎某一列最下面的砖块并得到相应的得分。有的砖块在打碎后可以获得一发额外子弹的奖励。求该游戏的最大得分。输入格式第一行有\(3\)个正整数,\(n,m,k\)。......
  • 洛谷 P1204 [USACO1.2] 挤牛奶Milking Cows
    题意:给定n个区间,左端点和右端点表示工作开始时间和结束时间。求最长一直有人在工作的时间和无人工作的时间。思路:想到了并查集,还有差分树状数组,最后选择差分数组。左端点加,右端点减,然后一次遍历即可。总结:习惯性的在右端点+1的位置减少了1,但是不适用于这个题目的逻辑。因为在右......
  • [题解][洛谷P1412] 经营与开发
    题目描述给定n,k,c,w,然后输入n组数据,数据分为两种:1ai:可以选择获得aiw的价值,但w会变成w(1-0.01*k)2bi:可以选择损失biw的价值,但w会变成w(1+0.01*c)求可获得的最大价值是多少。题解看到这个题,我的第一思路是求后缀和,然后让新得到的系数乘后缀和判断是否进行操作。但问题在于,对于......
  • 【LGR-182-Div.4】洛谷入门赛 #22
    题源:【LGR-182-Div.4】洛谷入门赛#22目录A疯狂大减价BZngivaeL的中考C游乐场D吃苹果E天上的气球F神秘排列G道法考试H非众数A疯狂大减价分析:两张票的先后顺序枚举一下,求出最小值。#include<bits/stdc++.h>usingnamespacestd;constintN=1e3+10;intn,k,ans......
  • 洛谷题单指南-动态规划1-P1077 [NOIP2012 普及组] 摆花
    原题链接:https://www.luogu.com.cn/problem/P1077题意解读:n种花选m个的选法,每种花数量为ai。解题思路:设dp[i][j]表示前i种花选j个的选法对于第i种花,可以选0,1,2...min(ai,j)个则有递推式:dp[i][j]=∑dp[i-1][j-k],k取0,1,2...min(ai,j)初始化dp[0][0]=1100分代码:#incl......
  • 洛谷 p3372 线段树
    更改了线段树实现的方式,将lazy值作为单独的节点存在,降低存储压力structNode{longlongsum;Node():sum(0ll){}Nodeoperator+(constNode&other){Noderes=*this;res.sum+=other.sum;returnres;};voidapplyLazy(......
  • 洛谷题单指南-动态规划1-P1049 [NOIP2001 普及组] 装箱问题
    原题链接:https://www.luogu.com.cn/problem/P1049题意解读:装尽可能多的物品,使得总体积越大越好,即剩余空间最小,还是一个01背包问题,物品的体积就是其价值。解题思路:01背包模版题,物品体积、价值相同,直接采用一维dp。100分代码:#include<bits/stdc++.h>usingnamespacestd;co......
  • 「杂题乱刷」洛谷 P2398
    典题。发现问题可以变为枚举\(i\),求出两两数\(gcd\)为\(i\)的个数,但是这样还是\(O(n^2)\)的。然后可以将两边同时除以\(i\),原式变为暴力筛复杂度是\(O(n\log_2(n))\)的,加个前缀和时间复杂度为\(O(n)\)。点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是......
  • 洛谷题单指南-动态规划1-P1115 最大子段和
    原题链接:https://www.luogu.com.cn/problem/P1115题意解读:计算最大字段和,典型dp问题。解题思路:设a[]表示所有整数,f[i]表示以第i个数结束的最大字段和当f[i-1]>=0时,f[i]=f[i-1]+a[i]否则,f[i]=a[i]因此,递归式为f[i]=max(a[i],f[i-1]+a[i])注意整数可能为负,ans初始......