C++算法竞赛入门常用知识点

embedded/2024/11/4 7:25:20/

万能头文件

#include<bits/stdc++.h>

遍历容器

带&:取地址,及取出来的是原元素。

不带&:引用,及取出来的是副本,不会对原元素造成影响。

for (auto &ele : st) //auto为类型 st为容器名cout << ele << endl;

迭代器find()

一般容器,如vector、map等
s.find(x) == s.end()//没找到
if (s.find(x) != s.end())//如果找到了
string字符串
if(B.find(ch)==string::npos)
//find()未查询到的返回值是string::npos,此代码表示未查询到

数字字符转化为整形

ans=ans*10+ch-'0';//数字字符减去0的ASCII码后转化为整形//ans*10防止输入二位以上数

阶乘函数

tgamma(n+1)指的是1到n的阶乘,及n!

以下函数返回的是C(p,l),及为从 p个不同元素中取 i 个元素的组合数。

double just(int p,int l){return tgamma(p + 1) / (tgamma(l + 1) * tgamma(p - l + 1));
}

要注意 tgamma的返回值为double。不过可以传入int再用double进行接收

cout << fixed << setprecision(0) << sum;

如果要输出整数,可以结合以上代码去掉浮点类型小数部分

如果求C(n,m)可以用tgamma但是单纯求阶乘累加我推荐下面这种 (L1-013 计算阶乘和)

for(int i=1;i<=n;i++)
{add*=i;sum+=add;
}

判断素数/质数

bool is_prime(int x)
{if (x < 2) return false;for (int i = 2; i <= x / i; i ++ )if (x % i == 0)return false;return true;
}

setw()字段宽度函数运用

setw(int n)是c++中在输出操作中使用的字段宽度设置,设置输出的域宽,n表示字段宽度。只对紧接着的输出有效,紧接着的输出结束后又变回默认的域宽。
当后面紧跟着的输出字段长度小于n的时候,在该字段前面用空格补齐;当输出字段长度大于n时,全部整体输出。

cout << setw(5)<< i;//设置i的字段宽度为5,不足用空格补齐,在i前添加,i为最后一个字段

dev-cpp开启c++11

ps:在我使用dev-c++时报错:

range-based ‘for’ loops are not allowed in C++98 mode

解决方法1:工具—>编译选项—>程序

gcc:gcc.exe -std=c++11

g++:g++.exe -std=c++11

解决方法2:工具—>编译选项—>编译器

勾选编译时加入以下命令:

添加: -std=c++11

ps:注意-std前有一个空格。


double类型保留几位小数

括号中的数表示保留几位小数,需要注意的是,此函数是有四舍五入功能的。

所以setprecision(0)通常用于小数部分为0的数取整,及配合tgamma函数使用。

cout<<fixed<<setprecision(2)<<n;

IO优化c++

ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); 的作用和注意事项-CSDN博客

重点注意:cout<<endl不能使用,要用cout<<‘\n’

ios::sync_with_stdio, cin.tie(0), cout.tie(0);

初始化数组/容器

memset只能设置0,-1或很大/很小的数(但是memset很快),所以改用stl自带函数fill()

数组

fill(dp, dp + N, 1); // 正确初始化dp数组为1

容器

fill(v.begin(), v.end(), 1);

清空元素释放内存

数组

memset(a,0,sizeof a);
memset(diff,0,(t+1)*4);

a是数组名,0是初始化值,(t+1)*4是字节数,int是4字节,long long是8字节

容器

为什么不用自带的clear()?因为clear()只能清空元素不能释放内存。

vector<string> v;
map<string,int> m;
vector<string>().swap(v);
map<string,int>().swap(m);

getline()

固定搭配,cin输入后需要吃掉回车再用getline输入

cin >> n;
cin.ignore(); // 吃掉回车
getline(cin, s);

异或运算符: a^b

#include<bits/stdc++.h>
using namespace std;
const int N =1e5+10;
int a[N];
int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n,res=0;cin>>n;for(int i=0;i<n;i++) cin>>a[i];for(int i=0;i<n;i++){for(int j=0;j<=i;j++){res=max(res,a[i]^a[j]);}}cout<<res;return 0;
}

最大公约数

__gcd(a,b);

最小公倍数

__lcm(a,b);

大数模除法

#include<bits/stdc++.h>
using namespace std;
const int N =1e6;
int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int ans=0;string s="12345678901234567890123456789012345678901234567890";for(char ele : s){ans=(ans*10+(ele-'0'))%2023;}cout<<ans;return 0; 
} 

字符串转数字、数字转字符串、字符转字符串

字符串转数字
 int num=stoi(s3);
数字转字符串
string s1=to_string(a);
字符转字符串
string(1,ele);

反转字符串

reverse(s2.begin(),s2.end());

double型保留精度(非输出)

double tr(double value, int pre) {double factor = pow(10.0, pre);return trunc(value  *  factor) / factor;
}
double tr = tr(value, 6);//保留6位精度

更加简洁的是用round函数(带四舍五入)

round(i * 100) / 100

输入不定长数据

  do{int n;cin>>n;v.push_back(n);}while(cin.get()!='\n');

将字符串转化为小写

transform(s.begin(),s.end(),s.begin(),::toupper);

http://www.ppmy.cn/embedded/134563.html

相关文章

Node.js 发展史

自从 Node.js 诞生以来&#xff0c;它经历了许多版本的演进和改进。Node.js 于2009年首次发布&#xff0c;由 Ryan Dahl 创建&#xff0c;从那时起&#xff0c;它经历了许多重要版本和里程碑。在这篇文章中&#xff0c;我将为你介绍 Node.js 从发布至今的一些重要版本&#xff…

LeetCode (206单链表反转)

目录 题目描述: 代码: 第一种: 第二种: 第三种: 第四种: 第五种: 主函数: ListNode类: 题目描述: 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3…

uniapp iOS打包证书过期——重新下载证书及更新文件

证书过期&#xff0c;重新生成步骤 关于所需的证书、标识符、描述文件等请查看iOS打包证书申请流程证书有效期为1年 过期提示 生成证书 点击 钥匙串访问 → 证书助理 → 从证书颁发机构请求证书 &#xff1b; 我这里选择 存储到磁盘 &#xff0c;邮件、名称 可自定义&#…

【折腾一上午】Java POI 导出 Excel 自适应列宽行高

主要方法&#xff1a; 调用 sheet.autoSizeColumn(f) // f是需要自适应的列的序号注&#xff1a; 1. 在设置自适应之前需要调用以下方法&#xff0c;否则会报跟踪列错误。 sheet.trackAllColumnsForAutoSizing() 2. 当你去调用上个方法的时候发现&#xff0c;sheet并没有…

深度学习中的核心概念详解

目录 前言1. 深度神经网络与残差网络1.1 深度神经网络的挑战1.2 残差网络的提出与实现1.3 残差网络的作用 2. 词向量&#xff1a;语义理解的基础2.1 词向量的基本概念2.2 词向量的实现方法与作用 3. 对象嵌入&#xff1a;从词向量到对象表示3.1 对象嵌入的概念3.2 对象嵌入的应…

手机备忘录怎么导出到电脑,

在忙碌的现代生活中&#xff0c;我们常常需要在手机和电脑之间切换工作&#xff0c;手机里的备忘录记录了我们的重要事项&#xff0c;有时候需要在电脑端查看和处理。那么&#xff0c;如何将手机备忘录的内容导出到电脑呢&#xff1f;其实&#xff0c;这个问题的解决方法并不复…

CSS3新增盒子属性(三)

1、CSS3新增盒子属性 1.1 box-sizing 设置盒子的大小。 content-box&#xff1a;设置内容区的大小&#xff1b;border-box&#xff1a;设置盒子的总大小。 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><t…

一、SpringMVC简介

文章目录 课程大纲1. 什么是MVC2. 什么是SpringMVC3. SpringMVC的特点 课程大纲 1. 什么是MVC 2. 什么是SpringMVC 3. SpringMVC的特点