CQOI2018 九连环 打表找规律 fft快速傅里叶变换
题面:
分析:
个人认为这道题没有什么价值,纯粹是为了考算法而考算法。
对于小数据我们可以直接爆搜打表,打表出来我们可以观察规律。
f[1~10]: 1 2 5 10 21 42 85 170 341 682
我们可以发现的规律是,当i为奇数时,f[i]=f[i-1]*2+1,偶数时f[i]=f[i-1]*2。
既然这样,我们可以推断通项公式是否跟2的次幂有关。
我们连蒙带猜连导带推,可以得出,f[i]=2^(i+1)/3(下取整)。
再结合数据范围,我们可以决定是写fft+快速幂还是写python
这样这道题就结束了。
代码:
#include<bits/stdc++.h>
#define db double
#define ll long long
#define cp complex<db>
using namespace std;
const int N=;
const db pi=acos(-);int r[N];
void fft(cp *a,int *r,int lm,int op){
for(int i=;i<lm;i++)
if(i<r[i]) swap(a[i],a[r[i]]);
for(int mid=;mid<lm;mid<<=){
cp wn;wn=cp(cos(pi/mid),op*sin(pi/mid));
for(int R=mid<<,j =;j<lm;j+=R){
cp w;w=cp(,);
for(int k=;k<mid;k++,w=w*wn){
cp x=a[j+k],y=w*a[j+mid+k];
a[j+k]=x+y;a[j+mid+k]=x-y;
}
}
} return ;
} struct big{
int g[N],len;
big(){
memset(g,,sizeof(g));len=;
} big(int x){
memset(g,,sizeof(g));len=;
if(!x){len=;return ;}
while(x) g[len++]=x%,x/=;
} void operator *=(const big &b){
static cp A[N],B[N];
int nl=len+b.len,lm=,L=;
while(lm<nl) lm<<=,++L;
for(int i=;i<lm;i++)
A[i]=cp(i<len?g[i]:,),
B[i]=cp(i<b.len?b.g[i]:,);r[]=;
for(int i=;i<lm;i++)
r[i]=(r[i>>]>>)|((i&)<<(L-));
fft(A,r,lm,);fft(B,r,lm,);
for(int i=;i<lm;i++) A[i]*=B[i];
fft(A,r,lm,-);int ans[N];
for(int i=;i<lm;i++)
ans[i]=(int)(A[i].real()/lm+0.5);
for(int i=;i<lm;i++)
if(ans[i]>) ans[i+]+=ans[i]/,
ans[i]%=;lm--;
while(lm>&&!ans[lm]) lm--;len=++lm;
for(int i=;i<lm;i++) g[i]=ans[i];
} void operator /= (int x){
int sm=,nl=;
for(int i=len-;~i;i--){
sm=sm*+g[i];
if(sm<x) g[i]=;
else{
if(!nl) nl=i+;
g[i]=sm/x,sm%=x;
}
} len=max(nl,);
} void print(){
for(int i=len-;~i;i--)
printf("%d",g[i]);puts("");
}
}ret,bs;
int main(){
int t;scanf("%d",&t);while(t--){
int n;scanf("%d",&n);n++;
ret=big();bs=big();
while(n){
if(n&) ret*=bs;
bs*=bs;n>>=;
} ret/=;ret.print();
} return ;
}
fft快速傅里叶变换
CQOI2018 九连环 打表找规律 fft快速傅里叶变换的更多相关文章
- ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies (打表找规律+快速幂)
题目链接:https://nanti.jisuanke.com/t/31716 题目大意:有n个孩子和n个糖果,现在让n个孩子排成一列,一个一个发糖果,每个孩子随机挑选x个糖果给他,x>=1,直 ...
- Nowcoder 练习赛 17 C 操作数 ( k次前缀和、矩阵快速幂打表找规律、组合数 )
题目链接 题意 : 给定长度为n的数组a,定义一次操作为: 1. 算出长度为n的数组s,使得si= (a[1] + a[2] + ... + a[i]) mod 1,000,000,007: 2. ...
- 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用
转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...
- CF R 633 div 1 1338 C. Perfect Triples 打表找规律
LINK:Perfect Triples 初看这道题 一脸懵逼.. 完全没有思路 最多就只是发现一点小规律 即. a<b<c. 且b的最大的二进制位一定严格大于a b的最大二进制位一定等于 ...
- hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)
Nim or not Nim? Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- HDU 5753 Permutation Bo (推导 or 打表找规律)
Permutation Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 Description There are two sequen ...
- HDU 4861 Couple doubi (数论 or 打表找规律)
Couple doubi 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/D Description DouBiXp has a ...
- HDU2149-Good Luck in CET-4 Everybody!(博弈,打表找规律)
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- HDU 5795 A Simple Nim(SG打表找规律)
SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...
随机推荐
- 洛谷 - P1361 - 小M的作物 - 最小割 - 最大权闭合子图
第一次做最小割,不是很理解. https://www.luogu.org/problemnew/show/P1361 要把东西分进两类里,好像可以应用最小割的模板,其中一类A作为源点,另一类B作为汇点 ...
- POJ1236【图的前连通(缩点)】
题意: 1.初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件. 2.至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件. ...
- python __builtins__ float类 (25)
25.'float', 用于将整数和字符串转换成浮点数. class float(object) | float(x) -> floating point number | | Convert ...
- poj 3294 Life Forms【SA+二分】
先加入未出现字符间隔把n个串连起来,注意如果串开的char这个间隔字符不能溢出,把这个接起来的串跑SA,二分答案k,判断的时候把连续一段he>=k的分成一组,然后看着一段是否包含了>n/2 ...
- 如何使用go打出hell word
今天给大家带来一篇如何使用go打出hell word(手动滑稽) 关于go介绍的话,我就不多说了,在百度上一搜一大堆, 要使用的软件Visual Studio Code(VScode) 下载go的地址 ...
- fiddler安装及抓取http和https请求
安装fiddler 安装完成,此时就可以抓取http请求了 如果要抓取https请求,就需要更新fiddler为最新版,并安装证书 1.检查更新fiddler为最新版 2.下载证书并安装 https证 ...
- Spring Boot中使用Swagger2构建RESTful APIs介绍
1.添加相关依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <depen ...
- hud3371 Connect the Cities 简单最小生成树
//我看过Discuss说不能用克鲁斯卡尔因为有很多边 //但是只能用G++过,C++的确超时 #include <stdio.h> #include <string.h> # ...
- port 22: Connection refused
issue: os>ssh 196.168.27.90ssh: connect to host 196.168.27.90 port 22: Connection refused solutio ...
- C#实现较为实用的SQLhelper
第一次写博客,想不到写什么好b( ̄▽ ̄)d ,考虑的半天决定从sqlhelper开始,sqlhelper对程序员来说就像helloworld一样,很简单却又很重要,helloworld代表着程序员萌新 ...