题面:

  CQOI2018九连环

分析:

  个人认为这道题没有什么价值,纯粹是为了考算法而考算法。

  对于小数据我们可以直接爆搜打表,打表出来我们可以观察规律。

  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快速傅里叶变换的更多相关文章

  1. ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies (打表找规律+快速幂)

    题目链接:https://nanti.jisuanke.com/t/31716 题目大意:有n个孩子和n个糖果,现在让n个孩子排成一列,一个一个发糖果,每个孩子随机挑选x个糖果给他,x>=1,直 ...

  2. Nowcoder 练习赛 17 C 操作数 ( k次前缀和、矩阵快速幂打表找规律、组合数 )

    题目链接 题意 :  给定长度为n的数组a,定义一次操作为: 1. 算出长度为n的数组s,使得si= (a[1] + a[2] + ... + a[i]) mod 1,000,000,007: 2. ...

  3. 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用

    转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html    ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...

  4. CF R 633 div 1 1338 C. Perfect Triples 打表找规律

    LINK:Perfect Triples 初看这道题 一脸懵逼.. 完全没有思路 最多就只是发现一点小规律 即. a<b<c. 且b的最大的二进制位一定严格大于a b的最大二进制位一定等于 ...

  5. hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)

    Nim or not Nim? Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  6. HDU 5753 Permutation Bo (推导 or 打表找规律)

    Permutation Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 Description There are two sequen ...

  7. HDU 4861 Couple doubi (数论 or 打表找规律)

    Couple doubi 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/D Description DouBiXp has a ...

  8. 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 ...

  9. HDU 5795 A Simple Nim(SG打表找规律)

    SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...

随机推荐

  1. k-means 算法介绍

    概述 聚类属于机器学习的无监督学习,在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好.它跟分类的最主要区别就在于有没有“标签”.比如说我们有一组数据,数 ...

  2. rn滑动返回页面监听

    开发rn的同学都已经知道这个问题很坑了,真的很难弄,网上的方法尝试过很多,返回的的时候回调,是用的最多的,最开始我也是用的这种方式,但是滑动返回的时候监听不到.并且用起来也比较麻烦,不但需要在当前页面 ...

  3. bzoj 4550: 小奇的博弈【博弈论+dp】

    首先看出终止状态是全都堆在左边或者右边,然后发现黑的向左白的向右是最优策略(如果不能这样了也就该输了) 然后就不会了 参考 http://www.cnblogs.com/CQzhangyu/p/770 ...

  4. loj#2541. 「PKUWC2018」猎人杀

    传送门 思路太清奇了-- 考虑容斥,即枚举至少有哪几个是在\(1\)号之后被杀的.设\(A=\sum_{i=1}^nw_i\),\(S\)为那几个在\(1\)号之后被杀的人的\(w\)之和.关于杀了人 ...

  5. RobotFrameWork自动化系列:安装配置

    1.   RobotFrameWork安装配置 1.1. 安装环境 64位win10家庭中文版 网上很多这方面的教程,但是比较零散,这里是自己安装配置的一个简单的笔记. 1.2. 安装说明 由于Rob ...

  6. Linux中查看端口占用情况及结束相应进程

    1.查看某端口占用情况lsof -i :端口号 例如:lsof -i :81 显示如下信息: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ja ...

  7. C语言归并排序(合并排序)算法及代码

    归并排序也称合并排序,其算法思想是将待排序序列分为两部分,依次对分得的两个部分再次使用归并排序,之后再对其进行合并.仅从算法思想上了解归并排序会觉得很抽象,接下来就以对序列A[0], A[l]…, A ...

  8. EasyUI 前台开发的好助手

    今天用了下EASY ui 确实经典,前端开发利器啊

  9. size_t与size_type区别

    size()  标准库string里面有个函数size,用来返回字符串中的字符个数,具体用法如下: string st("The expense of spirit\n");cou ...

  10. Educational Codeforces Round 20 A

    Description You are given matrix with n rows and n columns filled with zeroes. You should put k ones ...