CF755G PolandBall and Many Other Balls 题解
从神 Karry 的题单过来的,然后自己瞎 yy 了一个方法,看题解区里没有,便来写一个题解
一个常数和复杂度都很大的题解
令 \(dp_{i,j}\) 为 在 \(i\) 个球中选 \(j\) 组的方案数,则显然有转移 \(dp_{i,j}=dp_{i-1,j}+dp_{i-1,j-1}+dp_{i-2,j-1}\)
然后考虑对其优化:
令 \(f_i\) 为 \(dp_i\) 的生成函数,则 \(f_i\) 只与 \(f_{i-1}\) 和 \(f_{i-2}\) 有关,且关系为 \(f_i=f_{i-2}\cdot x + f_{i-1}\cdot (x+1)\) .
然后考虑对上式进行矩阵加速递推,复杂度 \(O(k \log k \log n)\),再加一个巨大的常数,但此题 \(k\) 的范围很小,可以通过。
代码:
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define Fast_IO ios::sync_with_stdio(false);
#define fir first
#define sec second
#define mod 998244353
#define ll long long
inline int read()
{
char ch=getchar(); int nega=1; while(!isdigit(ch)) {if(ch=='-') nega=-1; ch=getchar();}
int ans=0; while(isdigit(ch)) {ans=ans*10+ch-48;ch=getchar();}
if(nega==-1) return -ans;
return ans;
}
typedef pair<int,int> pii;
int add(int x,int y){return x+y>=mod?x+y-mod:x+y;}
int sub(int x,int y){return x-y<0?x-y+mod:x-y;}
int mul(int x,int y){return 1LL*x*y%mod;}
int qpow(int x,int y)
{
int ans=1;
while(y)
{
if(y&1) ans=mul(ans,x);
x=mul(x,x);
y>>=1;
}
return ans;
}
int getInv(int x)
{
return qpow(x,mod-2);
}
// 略去多项式的板子,以下 vector 即是存储多项式的容器
using namespace Poly;
int n,k;
struct Mat
{
vector<int> a[3][3];
void clear()
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
a[i][j].resize(1);
a[i][j][0]=0;
}
}
}
};
Mat mul(Mat x,Mat y)
{
Mat ans; ans.clear();
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
{
for(int k=1;k<=2;k++)
{
ans.a[i][j]=ans.a[i][j]+x.a[i][k]*y.a[k][j];
}
}
}
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
{
if((int)ans.a[i][j].size()>k+1) ans.a[i][j].resize(k+1);
}
}
return ans;
}
Mat qpow(Mat x,int y)
{
Mat ans; ans.clear();
ans.a[1][1]=one,ans.a[2][2]=one;
while(y)
{
if(y&1)
{
ans=mul(ans,x);
}
x=mul(x,x);
y>>=1;
}
return ans;
}
signed main()
{
Init_Inv();
cin>>n>>k;
Mat a; a.clear();
a.a[1][2].resize(2); a.a[1][2][1]=1;
a.a[2][1]=one;
a.a[2][2].resize(2); a.a[2][2][1]=a.a[2][2][0]=1;
a=qpow(a,n-1);
Mat R; R.clear();
R.a[1][1]=one;
R.a[1][2].resize(2); R.a[1][2][0]=1,R.a[1][2][1]=1;
R=mul(R,a);
vector<int> ans=R.a[1][2];
ans.resize(k+1);
for(int i=1;i<=k;i++) printf("%d ",ans[i]); cout<<"\n";
return 0;
}
CF755G PolandBall and Many Other Balls 题解的更多相关文章
- 题解-CF755G PolandBall and Many Other Balls
题面 CF755G PolandBall and Many Other Balls 给定 \(n\) 和 \(m\).有一排 \(n\) 个球,求对于每个 \(1\le k\le m\),选出 \(k ...
- CF755G PolandBall and Many Other Balls/soj 57送饮料
题意:长度为n的序列,相邻两个或单独一个可以划分到一个组,每个元素最多处于一个组. 问恰好分割成k(1<=k<=m)段有多少种方案? 标程: #include<bits/stdc++ ...
- [POJ3783]Balls 题解
题目大意 鹰蛋问题.$ n\(个蛋,\)m\(层楼. 存在一层楼\)E\(,使得\)E\(以及\)E\(以下的楼层鹰蛋都不会摔碎,问最坏情况下最少多少次能够知道\)E$. 非常经典的模型,初看题目根本 ...
- CF850F Rainbow Balls 题解
考虑最后变成哪一种颜色. 设 \(s = \sum\limits_{i=1}^n a_i\) 设现在有 \(k\) 种当前颜色, 需要全部变成该种颜色, 期望步数为 \(f_k\). 考虑状态转移.设 ...
- FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ
因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ u1s1 我预感还会有Ⅲ 多项式基础操作: 例题: 26. CF438E The Child and Binary Tree 感觉这题作为第一题还 ...
- POJ 3687 Labeling Balls(拓扑排序)题解
Description Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them ...
- 【题解】Popping Balls AtCoder Code Festival 2017 qual B E 组合计数
蒟蒻__stdcall终于更新博客辣~ 一下午+一晚上=一道计数题QAQ 为什么计数题都这么玄学啊QAQ Prelude 题目链接:这里是传送门= ̄ω ̄= 下面我将分几个步骤讲一下这个题的做法,大家不 ...
- 洛谷 CF399B【Red and Blue Balls】题解
n年没有更博客:我总结出了规律,当学的东西很难得时候都去学习,没有时间写博客,只有 内容对于我这种蒟蒻友好,又让我非常闲的慌时才写博客,这种博客以后也没有价值(也有些是做完一道题有成就感写的) 最近内 ...
- 题解-AtCoder ARC-083F Collecting Balls
Problem ARC083F 题意概要:给定 \(2n\) 个二维平面上的球,坐标分别为 \((x_i,y_i)\),并给出 \(n\) 个 \(A\)类 机器人 和 \(n\) 个 \(B\)类 ...
随机推荐
- Nexus-产品认识
传统的思科数据中心网络架构也包括如下层级结构: • 核心层(一般是Nexus 7K来充当) • 汇聚层(一般也是Nexus 7K充当,可能存在2台,或4台的设备) • 接入层(一般会 ...
- Java中几种office文档转pdf的方式
最近公司要做office的文档,搜集了几种office文档转pdf的方式,简单的做下总结 我主要尝试了三种方式:openoffice,aspose,jacob 对他们进行了大文件,小文件,在linux ...
- Titer软件学习(Translation Initiation siTE detectoR)
Titer Source Codes lnk: https://github.com/zhangsaithu/titer 函数: collections.namedtuple()函数:https:// ...
- 蓝牙/zigbee/nrr24xx
目前使用的短距离无线通信技术及标准主要有Bluetooth.WIFI.ZigBee.UWB.NRF24XX系列产品等.Nordic公司生产的单片集成射频无线收发器NRF24XX系列芯片具有低功耗.支持 ...
- Mac 如何导出ipa文件中Assets.car包中的切图
在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xca ...
- python2.7 一个莫名其妙的错误
先看看错误: Traceback (most recent call last): File "/home/darkchii/文档/PycharmProjects/ml/model.py&q ...
- MRCP接口MRCPRecog 简介
功能:开始一个语音识别,一边讲话,一边识别,需要ASR服务器. 原型:MRCPRecog (grammar, options) grammar ---- 语法文件,可以是一个xml文件 options ...
- druid监控sql完整版
利用Druid实现应用和SQL监控 一.关于Druid Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系. D ...
- 什么是CSRF攻击?如何避免?
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一 ...
- 「快学springboot」集成Spring Security实现鉴权功能
Spring Security介绍 Spring Security是Spring全家桶中的处理身份和权限问题的一员.Spring Security可以根据使用者的需要定制相关的角色身份和身份所具有的权 ...