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 ...
随机推荐
- k-means 算法介绍
概述 聚类属于机器学习的无监督学习,在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好.它跟分类的最主要区别就在于有没有“标签”.比如说我们有一组数据,数 ...
- rn滑动返回页面监听
开发rn的同学都已经知道这个问题很坑了,真的很难弄,网上的方法尝试过很多,返回的的时候回调,是用的最多的,最开始我也是用的这种方式,但是滑动返回的时候监听不到.并且用起来也比较麻烦,不但需要在当前页面 ...
- bzoj 4550: 小奇的博弈【博弈论+dp】
首先看出终止状态是全都堆在左边或者右边,然后发现黑的向左白的向右是最优策略(如果不能这样了也就该输了) 然后就不会了 参考 http://www.cnblogs.com/CQzhangyu/p/770 ...
- loj#2541. 「PKUWC2018」猎人杀
传送门 思路太清奇了-- 考虑容斥,即枚举至少有哪几个是在\(1\)号之后被杀的.设\(A=\sum_{i=1}^nw_i\),\(S\)为那几个在\(1\)号之后被杀的人的\(w\)之和.关于杀了人 ...
- RobotFrameWork自动化系列:安装配置
1. RobotFrameWork安装配置 1.1. 安装环境 64位win10家庭中文版 网上很多这方面的教程,但是比较零散,这里是自己安装配置的一个简单的笔记. 1.2. 安装说明 由于Rob ...
- Linux中查看端口占用情况及结束相应进程
1.查看某端口占用情况lsof -i :端口号 例如:lsof -i :81 显示如下信息: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ja ...
- C语言归并排序(合并排序)算法及代码
归并排序也称合并排序,其算法思想是将待排序序列分为两部分,依次对分得的两个部分再次使用归并排序,之后再对其进行合并.仅从算法思想上了解归并排序会觉得很抽象,接下来就以对序列A[0], A[l]…, A ...
- EasyUI 前台开发的好助手
今天用了下EASY ui 确实经典,前端开发利器啊
- size_t与size_type区别
size() 标准库string里面有个函数size,用来返回字符串中的字符个数,具体用法如下: string st("The expense of spirit\n");cou ...
- Educational Codeforces Round 20 A
Description You are given matrix with n rows and n columns filled with zeroes. You should put k ones ...