打FFT时中发现的卡常技巧
题目:洛谷P1919 A*B Problem 加强版
我的代码完全借鉴boshi,然而他380ms我880ms。。。于是我通过彻底的卡(chao)常(dai)数(ma)成功优化到了380ms,都是改了一些等效写法,所以我决定把我发现的技巧贴出来,说不定以后用得到。。。如果你有什么卡常技巧也请告诉我QwQ
1.加register
这个不必多说了吧,卡常基本操作之一,但是貌似加多了也会慢
2.运算符重载时加上取地址符
本来是这样:
class cp
{
public:
double real,imag;
cp operator+(const cp aa)
{return (cp){real+aa.real,imag+aa.imag};}
cp operator-(const cp aa)
{return (cp){real-aa.real,imag-aa.imag};}
cp operator*(const cp aa)
{return (cp){real*aa.real-imag*aa.imag,real*aa.imag+imag*aa.real};}
};
改成了这样:
class cp
{
public:
double real,imag;
cp operator+(const cp& aa)
{return (cp){real+aa.real,imag+aa.imag};}
cp operator-(const cp& aa)
{return (cp){real-aa.real,imag-aa.imag};}
cp operator*(const cp& aa)
{return (cp){real*aa.real-imag*aa.imag,real*aa.imag+imag*aa.real};}
};
原因未知,但快了不少。
3.不要重载等号
如果你写了这样的函数:
cp& operator=(const cp& aa)
{if(this!=&aa){real=aa.real,imag=aa.imag;}return *this}
除非你用等号干一些特殊的事,否则去掉吧。编译器会自动重载等号,而且绝对要更快。
4.去掉多余的构造函数
一开始我是这么写的:
class cp
{
public:
double real,imag;
cp(double x=0.0,double y=0.0)
{real=x,imag=y;}
cp operator+(const cp aa)const
{return cp(real+aa.real,imag+aa.imag);}
//......
};
//in FFT()
cp wn(cos(pi/i),f*sin(pi/i));
改成了这样后:
class cp
{
public:
double real,imag;
cp operator+(const cp aa)
{return (cp){real+aa.real,imag+aa.imag};}
//......
};
//in FFT()
cp wn=(cp){cos(pi/i),f*sin(pi/i)};
就变快了,看来构造函数耗时还是很大的,尤其是当你要设一组变量的时候。
所以说,C++这玩意真的玄学=。=如果你有别的卡常技巧请务必告诉我QwQ
打FFT时中发现的卡常技巧的更多相关文章
- Codeforces 986D - Perfect Encoding(FFT+爪巴卡常题)
题面传送门 题意:给出 \(n\),构造出序列 \(b_1,b_2,\dots,b_m\) 使得 \(\prod\limits_{i=1}^mb_i\geq n\),求 \(\sum\limits_{ ...
- BZOJ4836: [Lydsy1704月赛]二元运算【分治FFT】【卡常(没卡过)】
Description 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问.每次询问给定一个数字 c 你需要求出有多少对 (i, j) 使 ...
- 发现一个小技巧:火狐浏览器对phpmyadmin支持更友好
这段时间ytkah正在迁移服务器(A→B),为了方便起见,直接用phpmyadmin导入数据库.一般我们是用navicat来操作数据库的,但是服务器A设置了权限,无法用navicat连接,只好在浏览器 ...
- CodeForces 327E Axis Walking(状压DP+卡常技巧)
Iahub wants to meet his girlfriend Iahubina. They both live in Ox axis (the horizontal axis). Iahub ...
- 金牌选手zzy的卡常头文件
一定要粘上去啊,亲测快两倍 #pragma GCC diagnostic error "-std=c++11" #pragma GCC optimize("-fdelet ...
- bzoj3676 [Apio2014]回文串 卡常+SAM+树上倍增
bzoj3676 [Apio2014]回文串 SAM+树上倍增 链接 bzoj luogu 思路 根据manacher可以知道,每次暴力扩展才有可能出现新的回文串. 所以推出本质不同的回文串个数是O( ...
- 从 洛谷P5309 Ynoi2011 初始化 看卡常
一般情况下,程序运行消耗时间主要与时间复杂度有关,超时与否取决于算法是否正确. 但对于某些题目,时间复杂度正确的程序也无法通过,这时我们就需要卡常数,即通过优化一些操作的常数因子减少时间消耗. 比如这 ...
- ynoi2018
题解: 全分块是啥操作啊.. 而且都好难.. 1.未来日记 这个比较简单 对每个块开个线段树维护权值 $n\sqrt{n}logn$ 这个会炸空间 并不能做... 但还是说一下做法 首先考虑分块 然后 ...
- CTSC&APIO被教做人记
DAY 0: 早早起来从衡水出发,在去火车站的路上明白了HZOI总是差点误车的真相……上了绿皮火车之后由于没网没流量就开始看政治书应付学考,然而并不是很能看进去,感觉初中学的比高中学的不知道高到哪里去 ...
随机推荐
- 【刷题】HDU 5869 Different GCD Subarray Query
Problem Description This is a simple problem. The teacher gives Bob a list of problems about GCD (Gr ...
- Winform Treeview 的按需加载
最近项目里用到treeview,原先设计的是一开始就把所有数据都加载到treeview里,后来发现客户的数据量实在太大,加载所有数据要2分钟,这个是客户没法接受的.后来就考虑到用户也不是一开始就要看所 ...
- 【ZJOI2015】诸神眷顾的幻想乡 解题报告
[ZJOI2015]诸神眷顾的幻想乡 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热 ...
- bzoj1008/luogu3197 越狱 (快速幂)
算$m^n-m*(m-1)^{n-1}$,就是总的减去不越狱的,不越狱就每次都选一个和上一个不一样的
- POJ 2516 Minimum Cost (网络流,最小费用流)
POJ 2516 Minimum Cost (网络流,最小费用流) Description Dearboy, a goods victualer, now comes to a big problem ...
- cookie工具包
package com.taotao.common.utils; import java.io.UnsupportedEncodingException; import java.net.URLDec ...
- Intellij-idea 如何编译maven工程
小编最近效应项目的要求,学习在idea上编写项目.作为一个新手遇到问题也算是正常的,重要的是把它解决,get新技能. 编写过maven工程的小伙伴们应该都知道怎么在eclipse中编译maven工程: ...
- [iOS问题归总]iPhone上传项目遇到的问题
1. 在上传项目的时候,UpLoad App Store后弹出iTunes Store operation failed. 错误原因:你在ItunesConnect(https://itunescon ...
- Linux - sed 常用操作
sed 文本常用操作方式 sed 10q # 显示文件中的前10行 (模拟"head") sed -n '$=' # 计算行数(模拟 "wc -l") sed ...
- python学习之——import sys模块
(1)sys.argv sys模块中的argv变量通过使用点号指明——sys.argv——这种方法的一个优势是这个名称不会与任何在你的程序中使用的argv变量冲突.另外,它也清晰地表明了这个名称是sy ...