算法竞赛个人注意事项

2023-11-14

浅浅记录一下自己在算法竞赛中的注意事项。

数据类

注意看数大小,数学库中的函数尽量加上 * 1.0转成double,防止整型溢出。int型相乘如果可能溢出,乘 * 1LL

数据范围大于1e6,注意用快读。

浮点数输入输出:

少用float
scanf("%lf", &d);
printf("%.f",d)

取模,注意取成负数的情况。

int,但是数据太大,全转long long

#include <iostream>
using namespace std;
#define int lnog long
signed main() // 注意 int -> signed
{
}

行末无空格

cout<<data<<" \n"[i == n];

数据存储尽量不要自定义struct或者class,善于使用pair,array等,防止需要重载什么的,导致代码层面的错误。

多组注意清空。

树结构注意单边和双边。

STL

STL 常用算法_golitter.的博客-CSDN博客

熟悉stl的数据结构,string, map, set,queue, stack, priority_queue, vector,array等。

熟悉stl的算法函数

lower_bound()
upper_bound()

find()
count()
substr()
*max_element()
sort()
unique()

在c++11中,max和min函数可以多个值。

max({v1,v2,v3,v4})

优先队列的重载

// 用priority_queue 自定义堆 http://www.cbww.cn/news/37826.shtml
//      要重载 < 操作符 ,注意两个const才可以通过编译
// 方法一 重载运算符<
struct adt { // 小顶堆
    int a;
    bool operator<(const adt& rhs) const { // 优先队列的><与sort的><相反. ** 没有const会报错
        return a > rhs.a; // 这里 从大到小进行排序,队列从最右边开始,所以是小顶堆
    }
};
// 方法二 使用lambda表达式
void test_priority_queue() {
    auto cmp = [](int pre, int suf) { return pre > suf; }; // 小顶堆
    priority_queue<int,vector<int>, decltype(cmp)> pq(cmp); // decltype 类型说明符

    // 实现自定义PII堆结构
    auto pii_cmp = [](PII pre, PII suf) {return pre.vf < suf.vf; };
    priority_queue<PII, vector<PII>, decltype(pii_cmp)> heap(pii_cmp);

}

<bitset> * 是由int型拼接的, e.g. 1000位bitset 操作时间复杂度 O( 1000 / (大于等于 32))

熟悉运用pair<int,int>vector

vector重新赋值

vector<int> ve;
ve.assign(N,3)

整数取整,可以用(LL)(ceil(a / b)),也可以用a / b + (a % b == 0 ? 0 : 1)

lambda表达式的使用:

  • 自定义排序
sort(all(ve), [](int pre, int suf) {
	return pre > suf; // 从大到小
});
// 等价于
sort(all(ve), greater<int>());
  • 写函数
auto lam = [&](int a) -> int {
	if(a > 0) return 1;
	else if(a == 0) return 0;
	else return -1;
}

注意lambde递归用法,c++11可以用

functional<void(int)> dfs = (int u) {};

c++14可以用

auto dfs = [&](auto &&dfs, int u) -> void {};

创建数组,个人常用vector

vector<vector<int>> f(n, vector<int> (n, 1));

算法代码实现

个人算法模板整理:2022/Algorithm__Template at main · golitter/2022 (github.com)

image-20230910010544230

不定项输入

// 需要包含 <sstream>
stringstream put_str;
string str;
getline(cin, str);
put_str<<str;
int cnt = 0,p;
while(put_str>>p) cnt++;

二分答案

  • 最大值最小
int l, r;
while(l < r) {
	int mid = l + r >> 1;
	if(check(mid)) r = mid;
	else l = mid + 1;
}
  • 最小值最大
int l, r;
while(l < r) {
	int mid = l + r + 1 >> 1;
	if(check(mid)) l = mid;
	else r = mid - 1;
}

去重离散化

vector<int> a,id,last;
id = a;
sort(id.begin(), id.end());
id.erase(unique(id.begin(), id.end()), id.end()); // 去重
for(int i = 0; i < n; ++i) {
	last[i] = lower_bound(id.begin(), id.end(), a[i]) - id.begin();
}

建图

  • 链式前向星
// 链式前向星
int h[N]; // 链表头,初始为-1 memset(h, -1, sizeof(h));
int e[N]; // 链表内容
int ne[N]; // 链表中指向下一个元素的指针
int w[N]; // 链表内容的权重
bool vis[N];
int idx; // 
// <u   , -- c -- , v>  ( u --- w --> v
void add(int u, int v, int c) {
    e[idx] = v, w[idx] = c, ne[idx] = h[u], h[u] = idx++;
}
  • vector<pair<int,int>> 或者 vector<array<int,2>>
vector<vector<int>> g(n + 1); // 无权重w
vector<vector<pair<int,int>>> g(n + 1); // 有权重

时间复杂度

1e8大概1秒。

image-20230910010214099

注意调和级数等反直觉时间复杂度。

注意根据给的数据范围和特殊性猜解法。

刷题策略

30分钟没有思路就可以看题解了,不能没有思路就看题解。

刷题 + 写题解 提高较快,便于复习(虽然不复习

每次模拟赛要有总结和反馈。

平时要注意找到自己模拟赛时的不好的状态和好的状态,进行加强或减少。比如,我就是做题,想出来一点就去敲代码,之后再想剩下的算法。其实这是很不对的,算法竞赛主要考察的算法而不是什么代码,目前也在一直减少这个状况发生。

就算自己AC了题,也不要忘了去看看大佬们的代码,可能他们更加简洁,可以学学不同的思路等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法竞赛个人注意事项 的相关文章

  • @Transactional注解 失效场景 及 解决版本

    文章目录 失效场景 1 数据库首先要支持事务 2 数据源没有配置事务管理器 3 没有被spring管理 4 方法不是public 5 Transactional 注解属性 propagation 设置错误 6 同一个类中方法调用 导致 Tr

随机推荐

  • java面试核心知识点原理篇文档,逆袭进大厂

    前言 每个技术人都有个大厂梦 我觉得这很正常 并不是饭后的谈资而是每个技术人的追求 像阿里 腾讯 美团 字节跳动 京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司 小公司 如果说能够在这样的公司锻炼几年 相信对自己能力的提升还是非
  • 14.CAPE:Camera View Position Embedding for Multi-View 3D Object Detection笔记

    14 CAPE Camera View Position Embedding for Multi View 3D Object Detection CAPE 用于多视图三维物体检测的相机视图位置嵌入 CVPR2023 文章结构 摘要 1 引
  • 华为云计算之ebackup了解

    华为云计算之ebackup了解 一 ebackup介绍 二 ebackup的特点 三 ebackup的组网方式 1 Lan Free方式 2 LAN base方式 四 ebackup组网场景 一 ebackup介绍 eBackup 为华为自
  • 一阶电路实验报告心得_一阶电路实验报告5篇

    1 测量时间常数 2 微分电路 积分电路 a 微分电路 b 积分电路 时间常数 的测量 R 4K R 1K R 6K C 0 22U R 1K R 1K 三 误差分析 1 实验过程中的读数误差 2 仪器的基本误差 3 导线连接不紧密产生的接
  • 移远M26 GSM实时获取网络时间

    移远M26 GSM实时获取网络时间 1 启用同步网络时间 开启同步网络时间功能 AT QNITZ 1 响应OK 2 获取最近一次的网络同步时间 AT QLTS 响应 QLTS
  • 卷积神经网络(Convolutional Neural Network)总结

    转自 http blog sina com cn s blog 870a639201019pee html 相关网站 CNNs应用的最成功的一个例子 Yann LeCun 曾经是Hinton组的research associate http
  • 第六章 生命周期和 Ajax 服务端通信

    6 1 Vue 实例生命周期 6 1 1 生命周期钩子函数 每个 Vue 实例在被创建时都要经过一系列的初始化过程 生命周期分为三大阶段 初始化显示 更新显示 销毁Vue实例 初始化阶段的钩子函数 beforeCreate 实例创建前 数据
  • Qt中QObject::sender()的用法

    当某一个Object emit一个signal的时候 它就是一个sender 系统会记录下当前是谁emit出这个signal的 所以你在对应的slot里就可以通过 sender 得到当前是谁invoke了你的slot 对应的是QObject
  • WebRTC学习记录(2):播放音频文件原理一探

    同样的 根据上篇WebRTC学习记录 1 采集microphone到文件原理实践 讲解 我还是需要有一个可运行的例子 经过多方研究 得到如下的例子 include webrtc base ssladapter h include webrt
  • C++中的引用

    引用的概念 引用可以看作一个已定义变量的别名 引用的语法 Type name var 普通引用在声明时必须用其它的变量进行初始化 声明时必须初始化 引用的使用举例 a和b指代的都是同一段内存空间 程序输出的结果 a 5 b 5 a和b的地址
  • vue动图加载图片不能正确显示的解决方法

    vue动图加载图片不能正确显示的解决方法 解决核心 代码 运行结果 上次解决过一次 没有记录 后来发现有小伙伴问我这个问题 我今天就顺手记录一下 具体的原因我这里就不详细说 加载不出来简略的原因是vue简析地址时候把你原的地址当做了一个模块
  • jupyter notebook快捷键

    Jupyter Notebook的快捷键包括 Ctrl Enter 运行当前单元格 Shift Enter 运行当前单元格并转到下一个单元格 Alt Enter 运行当前单元格并在下面插入新单元格 Ctrl S 保存文件 Ctrl Z 撤消
  • 回调函数

    单线程的时候同步的话 很容易阻塞在那边 用户体验极差 例如 异步是可以多线程的 因为UI主线程一旦阻塞整个界面就卡死了 一旦异步 两个线程下一个可以后台处理数据 一个可以做UI显示 js是单线程的 如果所有的操作 ajax 获取文件等I O
  • mmsegmentaion环境配置cuda11.0+pytorch1.7.1

    参考 https blog csdn net CSDNxiaoh article details 125321921 官方文档 https gitcode net mirrors open mmlab 1 创建虚拟环境 conda crea
  • LVGL-tileview控件

    控件特点 以page为基础扩展的控件 增加了释放后会有动画定格效果 lv tileview set tile act tileview ext gt act id x x move ext gt act id y y move true 切
  • 区块链-Web3.0-什么是Web3.0?

    一 什么是Web 3 0 Web 3 0 也被称为 去中心化Web 或 智能Web 是互联网的下一代 它使用了分布式系统技术 区块链技术和智能合约等新型技术 旨在构建一个更加去中心化 安全 透明和智能的互联网 Web 3 0 可以带来更广泛
  • 语言模型与数据集

    1 语言模型 给定文本序列x1 xT 其目的是估计联合概率p x1 xT 其应用包括做预训练模型 生成文本 给定几个词不断使用xt p xt x1 xt 1 生成后续文本 和判断多个序列中那个更常见 2 使用计数建模 N元语法 3 读取长序
  • Redis之SortedSet

    0 字符串String 1 哈希表Hash 2 列表List 3 集合Set 例子 4 有序集合SortedSet 例子myzset 5 发布 订阅Pub Sub 6 事务Transaction 7 脚本Script 8 连接Connect
  • R中设置图形参数--函数par()详解

    R有着非常强大的绘图功能 我们可以利用简单的几行代码绘制出各种图形来 但是有时候默认的图形设置没法满足我们的需要 甚至会碰到各种各样的小问题 如坐标轴或者标题出界了 或者图例说明的大小或者位置遮挡住了图形 甚至有时候默认的颜色也不能满足我们
  • 算法竞赛个人注意事项

    浅浅记录一下自己在算法竞赛中的注意事项 数据类 注意看数大小 数学库中的函数尽量加上 1 0 转成double 防止整型溢出 int型相乘如果可能溢出 乘 1LL 数据范围大于1e6 注意用快读 浮点数输入输出 少用float scanf