题目:洛谷P1919 A*B Problem 加强版

我的代码完全借鉴boshi,然而他380ms我880ms。。。于是我通过彻底的卡(chao)常(dai)数(ma)成功优化到了380ms,都是改了一些等效写法,所以我决定把我发现的技巧贴出来,说不定以后用得到。。。如果你有什么卡常技巧也请告诉我QwQ

1.加register

这个不必多说了吧,卡常基本操作之一,但是貌似加多了也会慢

2.运算符重载时加上取地址符

本来是这样:

  1. class cp
  2. {
  3. public:
  4. double real,imag;
  5. cp operator+(const cp aa)
  6. {return (cp){real+aa.real,imag+aa.imag};}
  7. cp operator-(const cp aa)
  8. {return (cp){real-aa.real,imag-aa.imag};}
  9. cp operator*(const cp aa)
  10. {return (cp){real*aa.real-imag*aa.imag,real*aa.imag+imag*aa.real};}
  11. };

改成了这样:

  1. class cp
  2. {
  3. public:
  4. double real,imag;
  5. cp operator+(const cp& aa)
  6. {return (cp){real+aa.real,imag+aa.imag};}
  7. cp operator-(const cp& aa)
  8. {return (cp){real-aa.real,imag-aa.imag};}
  9. cp operator*(const cp& aa)
  10. {return (cp){real*aa.real-imag*aa.imag,real*aa.imag+imag*aa.real};}
  11. };

原因未知,但快了不少。

3.不要重载等号

如果你写了这样的函数:

  1. cp& operator=(const cp& aa)
  2. {if(this!=&aa){real=aa.real,imag=aa.imag;}return *this}

除非你用等号干一些特殊的事,否则去掉吧。编译器会自动重载等号,而且绝对要更快。

4.去掉多余的构造函数

一开始我是这么写的:

  1. class cp
  2. {
  3. public:
  4. double real,imag;
  5. cp(double x=0.0,double y=0.0)
  6. {real=x,imag=y;}
  7. cp operator+(const cp aa)const
  8. {return cp(real+aa.real,imag+aa.imag);}
  9. //......
  10. };
  11. //in FFT()
  12. cp wn(cos(pi/i),f*sin(pi/i));

改成了这样后:

  1. class cp
  2. {
  3. public:
  4. double real,imag;
  5. cp operator+(const cp aa)
  6. {return (cp){real+aa.real,imag+aa.imag};}
  7. //......
  8. };
  9. //in FFT()
  10. 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. 【题解】 P1879 玉米田Corn Fields (动态规划,状态压缩)

    题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...

  2. 自学Zabbix3.5.1-监控项item-key介绍

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix3.5.1-监控项item-key介绍 个人觉得艰难理解,故附上原文档:https ...

  3. Mountainous landscape

    Description 现在在平面上给你一条折线 \(P_1P_2 \cdots P_n\) . \(x\) 坐标是严格单调递增的.对于每一段折线 \(P_iP_{i+1}\) ,请你找一个最小的 \ ...

  4. 自动化运维工之Ansible(1)

    1.1 ansible简介 1.1.1 .Ansible软件介绍: Ansible提供一种最简单的方式用于发布.管理和编排计算机系统的工具,可在数分钟内搞定.Ansible由Python语言开发, 默 ...

  5. IIS并发连接数和数据库连接池

    一.数据库连接池 1.报错: 超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. 2.问题分析: 问题的原因是与数据库的连接没有显示关 ...

  6. centos7下设置opencv环境变量

    最近要装YOLO,但是MAKE的时候总是找不到OPENCV的路径, 原因是:我以前卸载过一次OPENCV,然后自己重新安装了opencv2.4.10,  因为当时只在QT 中用,所以编译完也没有设置环 ...

  7. linux shell重定向

    http://note.youdao.com/noteshare?id=e944e6315d1566b3417e6f59305ddedc

  8. python的内置模块re模块方法详解以及使用

    正则表达式 一.普通字符 .     通配符一个.只匹配一个字符 匹配任意除换行符"\n"外的字符(在DOTALL模式中也能匹配换行符 >>> import re ...

  9. Vue实例的生命周期(钩子函数)

    Vue实例的生命钩子总共有10个 先上官方图: 下面时一个vue实例定义钩子函数的例子: var app=new Vue({ el:'#app', beforeCreate:function(){ c ...

  10. Java SSM框架之MyBatis3(五)MyBatis之ResultMap详解

    resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中. resultMap包含的元素: <!--column不做限制,可以为任意 ...