# ACM奇淫技巧
ACM奇淫技巧
差分操作
描述:给定一个数组,每次可以对数组某一个区间加一或者减一,求最少操作多少次可以使数组全部元素一致,最终可能的序列有多少种。
题解:可以使用差分,先求一个差分数组,差分数组中正数总和位x,负数总和为y。由于只能加一或者减一操作(加m减m操作可以同样分析,暂时没有想出怎么解,只是感觉可以同样分析)。所有最少操作次数为min(x,y)(解释:每次操作选取一正数一负数,正数减1负数加1)+abs(x-y)(剩下全正或者全负的情况,只能和差分数组的第一项或者 最后一项匹配)。最终可能的序列有abs(x-y)+1(解释:取决于最后全正或者全负情况下的操作一共abs(x-y)步操作,对原数组第一项的操作可能有(0,1,2,abs(x-y)一共abs(x-y)+1中操作方式)
坐标旋转
- (x,y)绕原点逆时针旋转\(\beta\)角到(s,t)

ACM 卡常优化
vsc代码块(头文件模板)
/*
* @Author: yexm
* @Date: $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE
* @Time: $CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND
* @Location: ${TM_FILENAME} Line_$TM_LINE_NUMBER
*/
//加减代替取模优化,多数组结构体优化,puts()输出优化
#include <bits/stdc++.h>
using namespace std;
#define fre freopen("data.in","r",stdin);
#define frew freopen("my.out","w",stdout);
#define ms(a) memset((a),0,sizeof(a))
#define re(i,a,b) for(register int i=(a);(i)<(b);++(i))
#define ree(i,a,b) for(register int i=(a);(i)<=(b);++(i))
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define lson l,m,i<<1
#define rson m+1,r,i<<1|1
#define reg register
typedef long long LL;
const int inf=(0x7f7f7f7f);
inline void sf(int& x){
x=0;int w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
x=(w?-x:x);
}
inline void pf(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) pf(x/10);
putchar(x%10+'0');
}
const int maxn=1e5+5;
int main(){
return 0;
}
读入输出优化
//支持正负整数
inline void sf(int& x){
x=0;int w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
x=(w?-x:x);
}
inline void pf(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) pf(x/10);
putchar(x%10+'0');
}
逗号表达式
- 逗号表达式比分号快很多很多
内联函数inline
- 内联函数的使用,一般函数比表达式慢很多。使用内联函数在编译的时候会直接在主程序中把函数内容展开,减少内存访问。不适合代码长和复杂的函数。
1 int max(int a, int b){.....}//原函数
2 inline int max(int a, int b){....}//直接加inline就好了。
寄存器变量register
- CPU寄存器变量的使用
频繁使用的变量,声明时加上该register关键字,运行时放到CPU寄存器中,速度快。但是CPU寄存器空间小,变量多的时候,一般还是丢到内存里面的。
for(register int i=0,a=1;i<=99999999;i++)
a++;
条件判断加减代替取模
//设模数为 mod
inline int inc(int x,int v,int mod){x+=v;return x>=mod?x-mod:x;}//代替取模+
inline int dec(int x,int v,int mod){x-=v;return x<0?x+mod:x;}//代替取模-
自增运算符优化
- 用++i代替i++,后置++需要保存临时变量以返回之前的值,在 STL 中非常慢。
使用结构体优化
- 如果要经常调用a[x],b[x],c[x]这样的数组,把它们写在同一个结构体里面会变快一些,比如f[x].a, f[x].b, f[x].c 指针比下标快,数组在用方括号时做了一次加法才能取地址!所以在那些计算量超大的数据结构中,你每次都多做了一次加法!!!在 64 位系统下是 long long 相加,效率可想而知。
# ACM奇淫技巧的更多相关文章
- 优化DP的奇淫技巧
DP是搞OI不可不学的算法.一些丧心病狂的出题人不满足于裸的DP,一定要加上优化才能A掉. 故下面记录一些优化DP的奇淫技巧. OJ 1326 裸的状态方程很好推. f[i]=max(f[j]+sum ...
- 12个实用的 Javascript 奇淫技巧
这里分享12个实用的 Javascript 奇淫技巧.JavaScript自1995年诞生以来已过去了16个年头,如今全世界无数的网页在依靠她完成各种关键任务,JavaScript曾在Tiobe发布的 ...
- NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC)
NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC) ARGUS 1月13日 发布 推荐 0 推荐 收藏 2 收藏,1.1k 浏览 文章整理中...... 实现思路 当服务器接收 ...
- NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识
NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识 ARGUS 1月13日 发布 推荐 0 推荐 收藏 6 收藏,707 浏览 大家或许会有这种奇葩的需求...要是同一台主机上, 需要针对不 ...
- NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1)
NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1) ARGUS 1月13日 发布 推荐 0 推荐 收藏 3 收藏,839 浏览 nginx的if支持=.!= 逻辑比较, 但不支持if中 & ...
- Zepto源码分析(二)奇淫技巧总结
Zepto源码分析(一)核心代码分析 Zepto源码分析(二)奇淫技巧总结 目录 * 前言 * 短路操作符 * 参数重载(参数个数重载) * 参数重载(参数类型重载) * CSS操作 * 获取属性值的 ...
- javascript之奇淫技巧
最近准备面试,复习一下javascript,整理了一些javascript的奇淫技巧~ //为兼容ie的模拟Object.keys() Object.showkeys = function(obj) ...
- Gradle更小、更快构建APP的奇淫技巧
本文已获得原作者授权同意,翻译以及转载原文链接:Build your Android app Faster and Smaller than ever作者:Jirawatee译文链接:Gradle更小 ...
- BZOJ 3192: [JLOI2013]删除物品 奇淫技巧&树状数组
点我看题 这题十分奇淫技巧...QAQ因为知道是树状数组的题QAQ刚开始以为维护两个数组的树状数组然后模拟从大到小,然后发现不会打QAQ 于是悄悄咪咪翻开题解了. 实际上两个数组可以看做一个数组 如 ...
随机推荐
- Nginx配置中的log_format用法梳理
nginx服务器日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,一般在nginx的配置文件中日记配置( ...
- AcWing:164. 可达性统计(拓扑排序 + 状态压缩算法)
给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边. 输出格式 输出共N行,表示每个点能 ...
- AcWing:146. 序列(小根堆 + 数学归纳 + 贪心)
给定m个序列,每个包含n个非负整数. 现在我们可以从每个序列中选择一个数字以形成具有m个整数的序列. 很明显,我们一共可以得到nmnm个这种序列, 然后我们可以计算每个序列中的数字之和,并得到nmnm ...
- JavaWeb-SpringSecurity在数据库中查询登陆用户
系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 JavaWeb-SpringSecurity在数据库中查询登陆用户 传送门 JavaWeb-Sp ...
- python3.*之列表常用操作
首先定义一个列表:names= ["xiaoming","xiaogang","xiaomei","xiaohong"] ...
- 如何使用word发布blog
今天使用onenote的时候无意中点击了发布到博客选项,知道了word可以直接发布博客.但一直找不到选项所以google了一番,最终找到了.帮助连接 这里 这篇博客主要记录一下截图. 1. 通过one ...
- Springboot2.0实现URL拦截
1.创建一个登陆拦截器SecurityInterceptor,它继承HandlerInterceptorAdapter类 package com.cn.commodity.config; import ...
- 学习前端第二天心得体会(初步了解HTML5的部分API以及画布Canvas)
一.HTML5部分API 1.选择器querySelector和querySelectorAll 1.1.querySelector:返回文档中匹配指定的CSS选择器的第一元素. document. ...
- Java Web开发中路径问题小结(getRequestUrl getContextUrl getServletUrl)
看以博客感觉不错,分享一下http://www.cnblogs.com/tianguook/archive/2012/08/31/2665755.html (1) Web开发中路径的几个基本概念 假设 ...
- 创建podspec文件,为自己的项目添加pod支持
Cocoapods作为iOS开发的包管理器,给我们的开发带来了极大的便利,而且越来越多的第三方类库支持Pod,可以通过Pod傻瓜式的集成到自己的工程中,那么问题来了,我自己也有一系列的小工具类,怎么让 ...