首页 > 其他分享 >天梯赛赛前总结

天梯赛赛前总结

时间:2024-04-20 12:11:33浏览次数:21  
标签:总结 int bound pos erase 天梯 size 赛前 dis

某些函数后面有带小括号的注解,小括号中各参数的顺序就是传入的参数的顺序。

stl

  • queue
    声明:queue name;(其他容器如无特别标注则声明方式与此相同)

    函数:front,back,empty,size,push,pop,swap(c++11)

    比较运算符:==,<=,>=,<,>,!=:按照字典序比较两个queue(c++20)

  • priority_queue
    函数:top,empty,size,push,pop,swap

  • stack
    函数:top,empty,size,push,pop,swap(c++11)

    比较运算符:==,<=,>=,<,>,!=:按照字典序比较两个stack(c++20)

  • map/unordered_map
    声明:map<first值类型,last值类型> name;

    函数:[], begin,end,rbegin,rend,empty,size,clear,insert,erase,find,lower_bound(返回指向首个不小于给定键的元素的迭代器 ),upper_bound

    tips:如果map的键值是一个struct,那么需要定义比较(<)。定义方法:bool operator <(const item &a){return x < a.x}(以x升序),unordered_map则不需要定义比较;一定要使用mp.lower_bound()而不是lower_bound(),直接用lower_bound()时间复杂度是不对的。

  • set/multiset
    函数:begin,end,rbegin,rend,empty,size,clear,insert,erase,find,lower_bound,upper_bound

    tips:对于multiset,在erase时,如果只想擦除一个值的一个元素,不能使用erase(x),一个较好的实现方式是erase(find(x));一定要使用st.lower_bound()而不是lower_bound(),直接用lower_bound()时间复杂度是不对的。

  • vector
    函数:begin,end,rbegin,rend,empty,size,clear,insert(在pos前插入x/在pos前插入cnt个x),erase(擦除pos处的元素/擦除[first, last)处的元素),push_back,pop_back,lower_bound,upper_bound

    比较运算符:==,<=,>=,<,>,!=:按照字典序比较两个vector(c++20中移除)

  • bitset
    函数:[],count,size,二进制操作,set(pos,val),flip(pos)(翻转指定位)

    声明:bitset<长度> name。

bfs

注意每往队列里扔一个元素就要把vis标记为1,否则时间复杂度可能有问题。

字符串

以 string 为模板。

  • size
  • insert:(在pos处插入cnt个ch)(在pos处插入s)
  • erase:(擦除pos处字符)(擦除从pos处开始的len个字符)
  • find:(查找字符串s在pos处之后的首次出现位置)返回值是首个字符的下标,如果没有则返回s.npos
  • rfind:(查找字符串s在pos处之后的最后一次出现位置)返回值是首个字符的下标,如果没有则返回s.npos
  • substr:(获得从pos处开始的len个字符构成的字符串)
  • 比较运算符<,=,<=...:字典序比较
  • +=:拼接两个字符串
  • getline(cin,ss):读入带空格的字符串

输入格式

对于scanf,printf:

"%02d":两位整数(例如13,02,05)。

"%.2lf":两位double(例如0.13,0.02,0.05)。

杂项

memset赋足够大值用0x3f,0和-1可以直接赋。

关闭输入输出流以加速读写:

std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);

常用算法

Floyd:

for (int k = 1; k <= n; k++) {
        for (int x = 1; x <= n; x++) {
            for (int y = 1; y <= n; y++) {
                f[x][y] = min(f[x][y], f[x][k] + f[k][y]);
            }
        }
    }

并查集

void find(size_t x) { return pa[x] == x ? x : pa[x] = find(pa[x]); }

dijkstra

struct edge {
  int v, w;
};

struct node {
  int dis, u;

  bool operator>(const node& a) const { return dis > a.dis; }
};

vector<edge> e[maxn];
int dis[maxn], vis[maxn];
priority_queue<node, vector<node>, greater<node> > q;

void dijkstra(int n, int s) {
  memset(dis, 63, sizeof(dis));
  dis[s] = 0;
  q.push({0, s});
  while (!q.empty()) {
    int u = q.top().u;
    q.pop();
    if (vis[u]) continue;
    vis[u] = 1;
    for (auto ed : e[u]) {
      int v = ed.v, w = ed.w;
      if (dis[v] > dis[u] + w) {
        dis[v] = dis[u] + w;
        q.push({dis[v], v});
      }
    }
  }
}

标签:总结,int,bound,pos,erase,天梯,size,赛前,dis
From: https://www.cnblogs.com/thedreammaker/p/18144169

相关文章

  • 基环树算法总结
    基环树算法总结一、什么是基环树基环树,顾名思义,有两个要素:环和树。因此,基环树就是一棵树的一个节点,扩成一个环,做题时,多棵基环树组成的基环树森林,常以如下方式出现:每个点只有一个出边。每个点只有一个入边。图中一共有\(n\)个点,\(n\)条边。那么,基环树类型的题目应该怎......
  • 掌握时间序列特征工程:常用特征总结与 Feature-engine 的应用
    时间序列数据的特征工程是一种技术,用于从时间序列数据中提取信息或构造特征,这些特征可用于提高机器学习模型的性能。以下是一些常见的时间序列特征工程技术:滚动统计量:计算时间窗口内的统计量,如平均值、中位数、标准偏差、最小值和最大值。这些统计量可以捕捉到时间序列在不同时......
  • 在路上阶段总结之反对本本主义
      今天把一个客户教育了。教育之后,发现自己被自己教育了。事情是这样的,客户提出来一个产品,让我评估一下工作量。我接连问了客户几个需求方面的问题。发现该客户一脸懵逼,他对自己规划的产品根本没什么深入了解。不懂市场定位,不懂具体的技术风险。反正就是只有一个想法,就是,所有......
  • OOP题目集1~3的总结
    目录(一)前言(二)作业介绍(三)算法与代码(四)SourceMonitor代码分析(五)自学内容(六)总结一、前言介绍本篇博客的大致内容、写作目的、意义等本篇博客介绍如何使用Java语言基础和算法来解决题目问题,在此基础上进行对最近Java编程语言学习的总结题目的难度为Java入门,主要考察类......
  • linux运维常用命令总结
    1.tarzcf打包目录时,排除其中的一些目录或者文件tar--exclude=dir1--exclude=dir2--exclude=file1-czvfarchive.tar.gzsource_directory 2.yum只下载不安装包yum-yinstallnfs-utilsrpcbind--downloadonly--downloaddir/home/nfs 3.查看本机出网IP地址......
  • 30 天精通 RxJS (25):Subject 总结
    Subject其实在RxJS中最常被误解的一部份,因为Subject可以让你用命令式的方式虽送值到一个observable的串流中。很多人会直接把这个特性拿来用在不知道如何建立Observable的状况,比如我们在30天精通RxJS(23)中提到的可以用在ReactJS的Event中,来建立event的observab......
  • Java题目集1-3总结
    (1)前言:第一次大作业的知识点包括类与对象正则表达式以及数组对象和不同类之间的关系;题量较小,难度不大,关键是理清question,test-paper,answer-paper之间的关系。第二次大作业的知识点增加了List,ArrayList,HashMap,三种变长数组的使用,增加了正则表达式的难度,题量增加,难度上升,试卷中的......
  • 30天【代码随想录算法训练营34期】第七章 回溯算法part06 (● 332.重新安排行程 ● 51
    332.重新安排行程木有看懂,没视频所以也没看懂51.N皇后自己写出来还是有难度的classSolution:defsolveNQueens(self,n:int)->List[List[str]]:result=[]#存储最终结果的二维字符串数组chessboard=['.'*nfor_inrange(n)]#初始化......
  • vue3+elementplus+axios+router的入门项目总结
    一、使用vite方式创建项目:1、创建空文件夹,用vscode打开空文件夹,终端上运行如下命令$npminitvite-app[项目名]:初始化项目$cd[项目名]:进入项目$npminstall:安装项目依赖$npmrundev:启动项目2、启动项目后会出现访问地址: 3、进入访问地址: 二、引入elementpuls......
  • 前端面试题解析与总结
    在2024年的前端行业,面试是进入理想公司的一道门槛。不同公司的面试流程和考察点各有不同,下面将结合三家知名公司的面试题目进行分析和总结,为广大前端开发者提供一份参考指南。一、某对外电商一面:笔试题:弹窗组件防抖截流代码实现关系型数组转换成树形结构对象数组全排列......