OI一些奇怪的优化手段和常用技巧

还能这样玩——关于一些OI的黑(sao)科(cao)技(zuo)优化 免责声明 本文仅供参考,由读者引发的一切后果,任何责任由读者自行承担。后果包括但不限于: 1. 优化后程序变慢。 2. 某些OJ/OI上导致的编译错误。 3. 文章中的某些错误引起的争论。 一、GCCGCCGCC系列 关于GCC的黑科技想必大家也就知道这几句吧: #pragma GCC optimize (3) #pragma GCC optimize (2) #pragma GCC o... 阅读详情

经典的O3优化(一般写在开头)

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")

G++手动扩大栈(写在main的开始)

int size = 256 << 20; // 256MB  
char *p = (char*)malloc(size) + size;  
__asm__("movl %0, %%esp\n" :: "r"(p));


C++手动扩大栈(一般比较少起作用,推荐上面那个)

#pragma comment(linker, "/STACK:102400000,102400000")


G++ 64位手动扩大栈

extern int main2(void) __asm__ ("main2"); 
int main2(){ exit(0); }//在这里写main函数
int main(){
	int size=64<<20; char *p=(char*)malloc(size)+size;  
    	__asm__ __volatile__("movq  %0, %%rsp\n"  "pushq $exit\n"   "jmp main2\n"  :: "r"(p)); 
}

读入优化
inline int rd(int& X){
    char ch=X=0;
    for(;ch<'0' || ch>'9';ch=getchar());
    for(;ch>='0'&&ch<='9';ch=getchar()) X=(X<<3)+(X<<1)+ch-'0';
    return X;
}

更快的读入优化

char str[10000001]; int stl=0;
inline int rd(int& X){
    char ch=X=0;
    for(;ch<'0' || ch>'9';ch=str[stl++]);
    for(;ch>='0'&&ch<='9';ch=str[stl++]) X=(X<<3)+(X<<1)+ch-'0';
    return X;
}
int main(){
	fread(str,10000000,1,stdin);
}

如果输入文件较大以上方法可以把ch=str[stl++]改成自己实现的getchar,具体代码如下

#define SIZE 1000000 
char str[SIZE]; int stl=SIZE;
inline char getch(){
	return stl==SIZE?fread(str,SIZE,1,stdin),str[stl=0]:str[stl++];
}
inline int rd(int& X){
    char ch=X=0;
    for(;ch<'0' || ch>'9';ch=getch());
    for(;ch>='0'&&ch<='9';ch=getch()) X=(X<<3)+(X<<1)+ch-'0';
    return X;
}


线段树和树状数组记得使用位运算

ST表

不要用math库的log!自己预处理!

对于s[i][j]=f(s[i][j-1],s[i+(1<<j-1)][j-1]),我们将i,j的顺序调换一下可以提高效率

特别是在二维ST表效果显著,速度提升四倍有多


取模

首先不得不说把模数写成变量是不太好的做法。。。

我们可以

#define M 1000000007
const int M=1000000007


如果题目要求输入模数呢?

我们还是可以

int main(){
	int p; scanf("%d",&p);
	const int Mod=p;
}

如果只有加法,我们考虑判定性取模即可

int mod(int x){ return x>Mod?x-Mod:x; }

空间优化,记得C++有一个不常用的东西:short

在64位机器上少用指针因为它和long long一样费空间


对于一些奇怪的64位的OJ,我们可以使用__int128来过一些毒瘤数论题(比如对10^18取模)


关于memset和memcpy以及memmove

这几个函数效率都非常高,比循环的速度快很多

其实用法也很简单,比如原code是这样的

for(int i=l;i<=r;++i) a[i]=0;
for(int i=l;i<=r;++i) a[i]=b[i];
for(int i=l;l<=r;++i) a[i]=b[i],b[i]=0;
我们可以改成

memset(a+l,0,r-l+1<<2);
memcpy(a+l,b+l,r-l+1<<2);
memmove(a+l,b+l,r-l+1<<2);

注意,左移的位数和a,b的类型有关,这里默认为int,sizeof(int)=4,所以就是左移2(乘4)

如果不知道a,b类型所占字节数,可以改成如下

memset(a+l,0,(r-l+1)*sizeof(a[0]));
memcpy(a+l,b+l,(r-l+1)*sizeof(a[0]));
memmove(a+l,b+l,(r-l+1)*sizeof(a[0]));

关于Dijkstra算法

一般的教材(误)上面都说:只适用于所有边权为正的情况

而实际上,dijk+heap是可以在负权图上面跑的,而且比spfa还好写

具体实现,去掉vis数组就好了,虽然这样效率可能比不上spfa了(因为有一个log)


关于负权回路和spfa

如果题目就是要你找一个负环,我们可以直接将queue<int>改成priority_queue<int> 

这样通常效率会提高很多(仅限于找负环,跑一般的最短路会慢)

如果还想更快,就把priority_queue<int> 的比较函数变成以下的函数(自己实现一个类似greater<int>的东西)dist是距离

inline bool cmp(int a,int b){ return dist[a]>dist[b]; }


zkw线段树:常数优化神器

如果对于值域不大的数据维护类似平衡树的操作,推荐用这个代替,常数小得可以和并查集比快(虽然复杂度不可比)

当然如果对于值域比较大的数据还是老老实实用递归式权值线段树吧


待更新。。。

如果有人有任何想法欢迎在下面评论,补充一些这里没有的技巧也是资磁的

OI程序优化技巧 阅读详情

相关推荐

CSP-S备考全攻略:从初赛过线到复赛拿分的核心路线

算法竞赛与信息学奥赛中,数据结构与算法是核心基本功。掌握动态规划、图论、二分答案、并查集等基础知识点,是取得好成绩的关键。CSP-S作为通向NOIP的重要认证,初赛以笔试考察程序阅读与完善,复赛则采用OI赛制,强调上机实战与部分分策略。备考时需围绕高频考点展开,如模拟、搜索、最短路、树形DP等,并熟悉Linux下的文件读写与调试方法。只有在赛制理解、算法训练与工程实践三方面同时发力,才能在CSP-S复赛中稳健拿分,为冲击省一奠定基础。

weixin_34121304的博客 313

jmp指令【原理详解 8086汇编语言+笔记】

指令格式示例jmp 标号-段间转移(远转移):jmp far ptr 标号-段内短转移:jmp short 标号;8位的位移-段内近转移:jmp near ptr 标号;16位的位移jmp 寄存器-jmp bx;等价于段内近转移,也是16位的位移jmp 内存单元(用地址表示的)-jmp word ptr 内存单元地址;段内转移-jmp dword ptr 内存单元地址;段间转移。

一只喜欢code的fox 2万+

ARM嵌入式代码体积优化实战:编译器选项与Thumb模式深度解析

在嵌入式系统开发中,代码体积优化是提升资源利用效率的核心技术。其原理在于通过编译器与链接器的协同工作,对指令集、函数调用和内联机制进行精细控制,从而在保证功能的前提下减少二进制文件大小。这项技术的价值在于能显著降低存储成本、提升缓存命中率,并延长电池续航,尤其适用于资源受限的物联网设备、可穿戴设备和工业控制器等场景。本文以ARM架构为例,深入探讨了Thumb指令集和函数内联等关键优化手段,通过实际案例展示了如何平衡代码密度与执行性能,为开发者提供了一套可复现的嵌入式代码瘦身方案。

weixin_30561177的博客 395

关于OI中简单的常数优化

有些东西借鉴了这里qwq 1.IO(istream/ostream) 输入输出优化 之后能,在赛场上常见的几种输入输出: 输入:   $1.cin$ 呵呵,不说什么了,慢的要死。大概$1e8$个数要读1分钟左右   $2.scanf, \_ \_ builtin \_ scanf()$ $scanf$ 其实还不算太快,但是$\_ \_ builtin \_ $在$NOIp$赛场上会$...

weixin_30475039的博客 308

从零复刻平衡小车(基于STM32F1)

平衡小车(基于STM32F1)

Legendyyy的博客 5038

OAI骨关节炎数据集申请与DICOM下载全流程避坑指南

医学影像分析中,DICOM格式是存储与交换CT、MRI等数据的通用标准,其元数据Tag承载着像素间距、层厚等关键物理信息,直接影响定量分析的准确性。在骨关节炎研究领域,OAI数据集因样本量大、随访时间长而成为高价值资源,但获取需通过NDA协议申请,并借助nda-tools命令行工具完成TB级影像的批量下载与断点续传。这一流程涉及浏览器环境配置、DICOM格式转换及Python预处理等工程环节,任一细节疏漏都可能导致数据读取异常或分析偏差。掌握从申请到落地的完整链路,能显著提升医学影像AI研究的效率与可复现性

weixin_30843121的博客 275

OI 中一些可能有用的小 Trick 与注意点

持续更新,但是更新周期会比较长。 图论: 杂项: 树上边权转点权转移到儿子节点,但是特别注意多余信息处理(尤其是树剖的时候) 比如树剖结束的时候处理最后一条重链,最顶端节点的答案不能处理进去(因为会有多余信息 (topx,fatopx)(top_x,fa_{top_x})(topx​,fatopx​​)) 还有一些计数题比如说统计路径上有多少个不同颜色的,注意一下根节点的多余数据处理(因为根节点是没有颜色的)。 看到图论题先想一下这几个问题:图是否连通?有向图还是无向图?是否带权?有没有重边与自环? 遇

Plozia 的小窝 1303

MID360+fastlio功能笔记

前言。

qq_35598561的博客 5295

Z-Image-Turbo问题解决:常见错误排查与优化技巧

本文介绍了如何在星图GPU平台上自动化部署Z-Image-Turbo极速云端创作室镜像,实现高效的AI图片生成功能。该镜像能够快速生成高质量图像,广泛应用于电商设计、社交媒体内容创作等场景,通过优化提示词和参数设置,用户可显著提升图像生成效率与质量。

weixin_36328210的博客 399

【知识图谱】Neo4j基本操作及数据库文件导入(graph.db.dump)

初探Neo4j导入数据备份数据客户端操作导入csv文件指定csv文件格式使用命令行导入csv文件附录 请读者参考上篇博文 Neo4j安装教程 导入数据 若开启服务,先在终端停止 Neo4j 服务 ./neo4j stop 接下来,下载射雕三部曲的数据库文件 wget https://labfile.oss.aliyuncs.com/courses/1354/graph.db.dump 下载完将出现 graph.db.dump 文件: 将数据库文件导入到 Neo4j 中 首先进入neo4j 根目录下:

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 8615

[RK3568 Android11] 开发之蓝牙(AP6275S)

前言 蓝牙是一种支持设备短距离通信(一般10m内)的无线电技术,能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。 接下来是在RK3568上调试AP6275S模块蓝牙部分: 一、设备树dts配置 根据硬件原理图,找到对应的控制引脚,配置好dts: ...

~未来可期~ 4072

博主自传——蒟蒻的OI之路

博主来自河北石家庄市第二中学,现在读高二,主攻信息学竞赛(其实并没有学习其他学科竞赛)。 NOIP中人品大爆发,使劲挤进河北省一等奖队伍,侥幸留在竞赛团队中(差点就淘汰出局啦)。 关于我的ID,YOUSIKI,就是那四个平假名,没有什么实际意义。若搜到日本某艺人,和我无关。 NOIP前主要活跃在PekingUniversityOnlineJudge(不知道拼错木有),现在主要活跃在Lydsy...

weixin_30693683的博客 132

(十五)CX20106A 中超声波测量的应用

(十五)CX20106A 中超声波测量的应用

m0_52555663的博客 4509

【CSP考前复习】关于考试时的注意事项

前言 作为一名服役4年来的老年OI选手,经历过的考试已经是数以百计了。在这么多次考试中,爆零垫底是常有的事,运气好了靠暴力得到好名次的事也经常发生。那么,CSP临近,我想有必要好好整理一下这些问题和经验。 一、关于暴力 1、为什么要打暴力——得分 这不废话吗考试的时候不打暴力等着爆零吗 首先,我们要明确打暴力是一件非常正确且有用的事: 第一,如果最后想不出正解,暴力的分数拿到手一般也能获得不低的成...

Cyan_rose 8160

BES 平台 SDK之 美格信Dongle 连接

最近项目到了试产阶段,需要用到美格信的Dongel 来测试ANC 相关功能。在此简单介绍下如何连接Dongel 的操作步骤。

谢文浩博客 924

英伟达 Jetson AGX Thor 官方入门教程(二)CUDA、Docker、JetPack 设置

本文详细介绍了NVIDIA Jetson AGX Thor开发套件的安装与配置流程。主要内容包括:1) BSP安装的三种方法(Jetson ISO、SDK Manager和Linux刷写脚本)及其适用场景;2) Docker环境的完整配置步骤及测试方法;3) CUDA工具包的两种安装方式(容器化和原生安装)及其性能对比;4) JetPack SDK的安装选项。文章提供了详细的命令行操作指南和故障排除建议,帮助开发者快速搭建AI开发环境,充分发挥Jetson平台的硬件性能优势。

机器人控制与仿真应用 1731

NOIp考试技巧

本文转自江苏信息学竞赛 本文作者许昊然毕业于南京外国语学校,曾获NOIP 2012一等奖(590分,江苏第一名)、NOI 2012金牌(485分,全国第19名)、IOI 2013金牌(世界第三名),高一获清华保送资格,2014年被美国麻省理工学院录取。 Part I. 赛场策略与技巧 首先,如果你的水平已经远超NOIP,自然是想怎么考怎么考了。 同理,如果你什么都不会,那么策略再好也是没用...

岂曰无衣,与子同袍 2173

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

PowerPaint-V1使用技巧:如何用提示词控制图片修复效果

本文介绍了如何在星图GPU平台上一键自动化部署🎨 PowerPaint-V1 Gradio镜像,实现智能图像修复与编辑。该工具支持通过文本提示词精确控制修复效果,例如无痕移除照片中的路人或替换物体,大幅提升图像处理的精准度和创作效率。

weixin_42515392的博客 145

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Unity5内部渲染的优化1:介绍

译自aras的博客,总共3篇文章,讲述unity5优化自己渲染器的过程 吸取大神调试与优化经验 在工作中我们形成一个小组“strike team”来优化unity渲染的cpu部分。 基本信息/父本的警告 在很多情况下,我要严厉的说“这段代码很烂!“。当要努力改善代码的时候,你当然想提高不好的地方,这是重点。 一般来说并不意味着代码库是坏的,或者它不能用于做出好东西。就在今年3月,

wolf96的专栏 3556

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

linux信息学竞赛教程,信息学竞赛金牌经验分享:水平不高怎么拿NOIP一等奖?

信息学竞赛作为5大学科竞赛之一,随着近年来互联网的发展,高校越来越重视信息学竞赛考生,每年都有大批量考生参加信息学竞赛,本文是信息学竞赛金牌考生为大家分享一些竞赛经验,供参考!许昊然是个信息学达人,两次获得国际信息学奥赛金牌。看过电影《阿凡达》后,许昊然曾连续花了几天时间自己捣鼓一个“光的追踪”程序。“当时编写了上千行的程序,不断地修改运行,因为程序复杂电脑高速运转,还差点把电脑‘烧’掉了。”许昊...

weixin_28949937的博客 644

Jetson Orin(Ubuntu20.04)远程监控一体化部署:NoMachine与Jtop实战指南

本文为Jetson Orin开发者提供了一套完整的远程监控与运维解决方案。通过详细步骤指导用户在Ubuntu 20.04系统上部署NoMachine实现流畅远程桌面访问,并安装Jtop工具实时监控GPU、CPU、内存及温度等关键硬件指标。这套‘远程驾驶舱’组合能极大提升AI项目开发与部署效率,特别适合长期运行的边缘计算应用。

threejs5artist的博客 445

水平不高怎么拿NOIP一等奖?南京外国语许昊然 比赛经验

本文转自江苏信息学竞赛 本文作者许昊然毕业于南京外国语学校,曾获NOIP 2012一等奖(590分,江苏第一名)、NOI 2012金牌(485分,全国第19名)、IOI 2013金牌(世界第三名),高一获清华保送资格,2014年被美国麻省理工学院录取。   Part I. 赛场策略与技巧   * 首先,如果你的水平已经远超NOIP,自然是想怎么考怎么考了。   * 同

剑锋OI SharpSwordOI 7443
上一篇: Jzoj4782 Math
下一篇: Jzoj4784 Map
扩展的灰
博客等级 码龄12年 60粉丝 342原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值