题目:洛谷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时中发现的卡常技巧的更多相关文章

  1. Codeforces 986D - Perfect Encoding(FFT+爪巴卡常题)

    题面传送门 题意:给出 \(n\),构造出序列 \(b_1,b_2,\dots,b_m\) 使得 \(\prod\limits_{i=1}^mb_i\geq n\),求 \(\sum\limits_{ ...

  2. BZOJ4836: [Lydsy1704月赛]二元运算【分治FFT】【卡常(没卡过)】

    Description 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问.每次询问给定一个数字 c 你需要求出有多少对 (i, j) 使 ...

  3. 发现一个小技巧:火狐浏览器对phpmyadmin支持更友好

    这段时间ytkah正在迁移服务器(A→B),为了方便起见,直接用phpmyadmin导入数据库.一般我们是用navicat来操作数据库的,但是服务器A设置了权限,无法用navicat连接,只好在浏览器 ...

  4. CodeForces 327E Axis Walking(状压DP+卡常技巧)

    Iahub wants to meet his girlfriend Iahubina. They both live in Ox axis (the horizontal axis). Iahub ...

  5. 金牌选手zzy的卡常头文件

    一定要粘上去啊,亲测快两倍 #pragma GCC diagnostic error "-std=c++11" #pragma GCC optimize("-fdelet ...

  6. bzoj3676 [Apio2014]回文串 卡常+SAM+树上倍增

    bzoj3676 [Apio2014]回文串 SAM+树上倍增 链接 bzoj luogu 思路 根据manacher可以知道,每次暴力扩展才有可能出现新的回文串. 所以推出本质不同的回文串个数是O( ...

  7. 从 洛谷P5309 Ynoi2011 初始化 看卡常

    一般情况下,程序运行消耗时间主要与时间复杂度有关,超时与否取决于算法是否正确. 但对于某些题目,时间复杂度正确的程序也无法通过,这时我们就需要卡常数,即通过优化一些操作的常数因子减少时间消耗. 比如这 ...

  8. ynoi2018

    题解: 全分块是啥操作啊.. 而且都好难.. 1.未来日记 这个比较简单 对每个块开个线段树维护权值 $n\sqrt{n}logn$ 这个会炸空间 并不能做... 但还是说一下做法 首先考虑分块 然后 ...

  9. CTSC&APIO被教做人记

    DAY 0: 早早起来从衡水出发,在去火车站的路上明白了HZOI总是差点误车的真相……上了绿皮火车之后由于没网没流量就开始看政治书应付学考,然而并不是很能看进去,感觉初中学的比高中学的不知道高到哪里去 ...

随机推荐

  1. 【刷题】HDU 5869 Different GCD Subarray Query

    Problem Description This is a simple problem. The teacher gives Bob a list of problems about GCD (Gr ...

  2. Winform Treeview 的按需加载

    最近项目里用到treeview,原先设计的是一开始就把所有数据都加载到treeview里,后来发现客户的数据量实在太大,加载所有数据要2分钟,这个是客户没法接受的.后来就考虑到用户也不是一开始就要看所 ...

  3. 【ZJOI2015】诸神眷顾的幻想乡 解题报告

    [ZJOI2015]诸神眷顾的幻想乡 Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热 ...

  4. bzoj1008/luogu3197 越狱 (快速幂)

    算$m^n-m*(m-1)^{n-1}$,就是总的减去不越狱的,不越狱就每次都选一个和上一个不一样的

  5. POJ 2516 Minimum Cost (网络流,最小费用流)

    POJ 2516 Minimum Cost (网络流,最小费用流) Description Dearboy, a goods victualer, now comes to a big problem ...

  6. cookie工具包

    package com.taotao.common.utils; import java.io.UnsupportedEncodingException; import java.net.URLDec ...

  7. Intellij-idea 如何编译maven工程

    小编最近效应项目的要求,学习在idea上编写项目.作为一个新手遇到问题也算是正常的,重要的是把它解决,get新技能. 编写过maven工程的小伙伴们应该都知道怎么在eclipse中编译maven工程: ...

  8. [iOS问题归总]iPhone上传项目遇到的问题

    1. 在上传项目的时候,UpLoad App Store后弹出iTunes Store operation failed. 错误原因:你在ItunesConnect(https://itunescon ...

  9. Linux - sed 常用操作

    sed 文本常用操作方式 sed 10q # 显示文件中的前10行 (模拟"head") sed -n '$=' # 计算行数(模拟 "wc -l") sed ...

  10. python学习之——import sys模块

    (1)sys.argv sys模块中的argv变量通过使用点号指明——sys.argv——这种方法的一个优势是这个名称不会与任何在你的程序中使用的argv变量冲突.另外,它也清晰地表明了这个名称是sy ...