清北集训Day6T1(生成函数)

听rqy说可以用生成函数做,感觉比较有意思

我们考虑在DP转移的时候,

$5,7,9$这三个数是没有限制的

因此他们出现的次数用01串表示的话就是$1111111111111111......$

$3,5$这两个数只能出现偶数次且必须出现

因此他们出现的次数用01串表示的话是$0010101010101010101....$

因为是组合计数问题,我们考虑用指数型生成函数来搞

对于第一个肯定就是$e^x$

对于第二个,我们首先用$\frac{e^x+e^{-x}}{2}$构造出$1010101010.....$

然后再减个$1$就好了

这样的话我们不难得到答案的方案实际就是

$\left( e^{x}\right) ^{3}\left( \dfrac {e^{x}+e^{-x}}{2}-1\right) ^{2}$

然后暴力推推推就可以得到

$\dfrac {1}{4}e^{5x}+\dfrac {1}{4}e+\dfrac {6}{4}e^{3x}-\dfrac {4}{4}e^{4x}-\dfrac {4}{4}e^{2x}$

然后快速幂搞一搞就好了

生成函数好神奇QWQ。。。

#include<cstdio>
#include<iostream>
#define int long long
using namespace std;
const int MAXN=1e6+10;
const int mod=1e9+7;
int a[MAXN]={0,5,1,3,4,2};
int k[MAXN]={0,1,1,6,-4,-4};
int fastpow(int a,int p)
{
    int base=1;
    while(p)
    {
        if(p&1) base=(base*a)%mod;
        a=(a*a)%mod;
        p>>=1;
    }
    return base%mod;
}
main()
{
    int N,ans=0;
    cin>>N;
    for(int i=1;i<=5;i++)
        ans =( ans + fastpow(a[i], N) * k[i] ) %mod;
    cout<<( ans * ( (mod + 1) / 4 ) %mod + mod ) %mod;
    return 0;
}

原文地址:https://www.cnblogs.com/zwfymqz/p/8672528.html

时间: 2024-08-02 21:15:08

清北集训Day6T1(生成函数)的相关文章

清北夏令营考试day1

清北夏令营考试day1 送分题(songfen) Time Limit:1000ms   Memory Limit:128MB 题目描述: LYK喜欢干一些有挑战的事,比如说求区间最大子段和.它知道这个题目有O(n)的做法.于是它想加强一下. 也就是说,LYK一开始有n个数,第i个数字是ai,它找来了一个新的数字P,并想将这n个数字中恰好一个数字替换成P.要求替换后的最大子段和尽可能大. LYK知道这个题目仍然很简单,于是就扔给大家来送分啦~ 注:最大子段和是指在n个数中选择一段区间[L,R](

清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)

清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算一次成绩.参与享优惠 描述 这是一道有背景的题目,小A也是一个有故事的人.但可惜的是这里纸张太小,小A无法把故事详细地说给大家听.可能小A自己也讲不清楚自己的故事,因为如果讲清了,也就没有这道题目了-- 小A的问题是这个样子,它找到了n份不同的工作,第i份工作每个月有ai的工资,每份工作需要小A每天

今我校——山东省著名高中——济南市历城区第二中学《清北学子经验交流会》感悟

放飞梦想,一起成长--历城二中清北学子经验交流会于今日9时在行政楼会议室隆重召开. 与会领导有:济南市教育局宣传科科长.高中部李矿水副校长.高三级部级部主任暨高中部副校长田庆民校长.全国生物奥赛金牌暨清华大学预录取的任雨同学.化学奥赛全国金牌被清华大学降至一本线录取的两位学长.数学奥赛被清华大学降至一本线录取的一位学长以及来自五湖四海的媒体朋友们,会议开场对他们的到来表达了热烈的欢迎.

五一清北总结——day1+day2

五一清北学习总结 ——day1+day2 一.排序 1.快速排序 O(nlogn)的排序,用sort可以快速完成,但是可以被卡,手写sort利用随机数可以避免被卡掉. 代码: void quick_sort(int *a, int l, int r) { swap(a[l], a[rand()*rand() % (r -l + 1) +l]); int tmp = a[l]; int l_ = l, r_ = r; while (l < r) { while (l < r) { if (a[r

清北押题班(1)

清北押题冲刺班Text1 T1 Count 问有几个无序二元组 $ (x ?, ?y) $ 满足 $ xy \equiv 1?(mod?P ) $ , $ 0 \leq x < P?, ?0 \leq y <P $ 解题思路: 你没看错,这是day1的T1,一道赤裸裸的数学题. Subtask 1:枚举 $ O(P^2) $ 个二元组,选出符合条件的,再去重: Subtask 2:可以发现模 $ P $ 意义下,一个数 x 有逆元,当且仅当 $ gcd(x, P) = 1 $ .并且如果 $

# 清北冬令营真题泛做

清北冬令营真题泛做 前言 这段时间为了准备冬令营把清北冬令营真题都做了一下.更个博回顾一下(免得你们老说我咕咕咕). 先写良心PKU的题再写THU的题, 主要是THU的题和PKU比起来真的毒瘤好多...... PKUWC2018 [PKUWC2018]Minimax 一个比较显然的暴力是归并排序,每次直接前后缀计算答案即可. 为啥不用线段树合并代替归并排序呢? 暴力线段树合并,合并的过程中顺便算一下即可,由于权值区间不交所以复杂度一个\(log\). [PKUWC2018]Slay the Sp

铁轨 清北学堂 线段树

铁轨 清北学堂 线段树 [题目描述] R 国的铁轨经常会进行重新修建. R 国是一个细长的国家,一共有 n 个城市排成一排,首都位于 1 号城市,相邻两个城市之间有铁路相连. 每次新建铁轨的时候,一定是从首都开始修建,直到某一个城市为止,这其间的铁路都会变成新版本的设 施,而旧设施会被拆除.然而,由于 R 国的工程师脑子不太好使,任意两种不同版本的铁路之间都无法连 接,因此必须要进行换乘. 现在给出你修建铁轨的操作,小 R 时不时第会想问你,如果在第 x 个城市到第 y 个城市之间随机选择一个

2017清北学堂集训笔记——图论

我们进入一个新的模块——图论! emmmmm这个专题更出来可能有点慢别介意,原因是要划的图和要给代码加的注释比较多,更重要的就是...这几个晚上我在追剧!!我们的少年时代超级超级超级好看,剧情很燃啊!!咳咳,好吧下面回归正题. 一.图的存储: 1.邻接矩阵: 假设有n个节点,建立一个n×n的矩阵,第i号节点能到达第j号节点就将[i][j]标记为1(有权值标记为权值), 样例如下图: 1 /*无向图,无权值*/ 2 int a[MAXN][MAXN];//邻接矩阵 3 int x,y;//两座城市

2017清北学堂集训笔记——动态规划Part2

啊~到下午啦,我们进入Part2!--一个简洁的开头 我们来探讨第一类问题--路径行走问题 经典例题:方格取数(Luogu 1004) 设有 N*N 的方格图 (N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0.* 某人从图的左上角的 A 点出发,可以向下行走,也可以向右走,直到到达右下角的 B 点.在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字 0).* 此人从 A 点到 B 点共走两次,试找出 2 条这样的路径,使得取得的数之和为最大.- 与数字金字塔