csp资料

头文件
#include <bits/stdc++.h>
using namespace std
isdigit(c);
isalpha(c);
switch(type){case value : 操作
}
continue;//结束本轮循环
break;//结束所在的整个循环tips:
//除法变乘法来算
//减法变加法
num=1e4+2;//"1e4"表示10的4次方//用于移除容器中相邻的重复元素。它会将重复元素移动到容器末尾,并返回一个指向不重复序列末尾的迭代器// 使用 std::unique 移除相邻的重复元素
std::vector<int>::iterator last = std::unique(vec.begin(), vec.end());
//last指向最后一个不重复元素之后的位置
// 删除移动到末尾的重复元素
vec.erase(last, vec.end());
数学
#include <algorithm>
min(a, b); max(a, b); 
swap(a, b);//sort(begin,end)
//默认升序,降序或者对于自定义的数据类型,要自定义排序方法
//数组
int arr[] = {3, 1, 4, 1, 5};
int size = sizeof(arr) / sizeof(arr[0]);
std::sort(arr, arr + size);
//vector
vector<int> numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
sort(numbers.begin(), numbers.end()); // 对 numbers 进行升序排序//对于自定义的数据类型,要自己定义排序函数
struct Score {int y;int result;
};
bool cmp(Score a, Score b){return a.y < b.y;//小于为真,升序排列//这种是稳定的
}
vector<Score> S;
sort(S.begin(), S.end(), cmp);//升序排列// 使用 std::stable_sort 对向量进行稳定排序
stable_sort(vec.begin(), vec.end());
数学
#include <cmath>
pow(2, 3);//3次方
abs(num);//绝对值//绝对值函数:
abs()//返回整数的绝对值
labs()//返回长整型的绝对值
fabs()//返回浮点数的绝对值//取整函数:
ceil()//向上取整
floor()// 向下取整
round()// 四舍五入//指数和对数函数:
exp()//计算 e 的幂次方
log()//自然对数
log10()//以 10 为底的对数//三角函数:
sin(), cos(), tan()// 正弦、余弦、正切
asin(), acos(), atan()://反正弦、反余弦、反正切//幂运算和平方根:
pow()//幂函数
sqrt()// 平方根//其他常见函数:
fmod()// 求模(取余)
modf()//分解整数与小数部分
// 使用 modf() 分解整数与小数部分double input = 123.45;double intPart;double fracPart = std::modf(input, &intPart);
isnan()//判断是否为非数值(NaN)
向量
#include <vector>
push_back(element):向 vector 尾部添加一个元素。
pop_back():删除 vector 尾部的元素。
size():返回 vector 中元素的个数。
empty():检查 vector 是否为空,返回布尔值。
clear():清空 vector 中的所有元素。
at(index):返回指定索引位置的元素,会进行边界检查。
front():返回 vector 的第一个元素。
back():返回 vector 的最后一个元素。
begin()end():返回指向第一个元素和尾后元素的迭代器,用于遍历整个 vector。
insert(iterator, element):在指定位置插入一个元素。
erase(iterator):删除指定位置的元素。
resize(new_size):改变 vector 的大小,如果新大小比当前大小大,则填充默认值;如果新大小比当前大小小,则删除多余元素。vector<int> T(2,0);//初始化为全0
vector<vector<int> > T(n,vector<int>(2,0));
map
#include <map>
map<KeyType, ValueType> myMap;
//加入
myMap[key] = value;
//删除
myMap.erase(key);检查键是否存在
if (myMap.count(key) > 0) {// 键存在
}auto it = myMap.find(key);
if (it != myMap.end()) {// 键存在
}
//size:返回 map 中键-值对的数量
int size = myMap.size();//clear:清空 map 中的所有元素
myMap.clear();// 使用 insert 方法合并, map2 合并到map1
map1.insert(map2.begin(), map2.end());
//遍历
for (auto it = myMap.begin(); it != myMap.end(); ++it) {cout << it->first << " : " << it->second << endl;//访问键和值it->firstit->second
}
//std::map 是基于红黑树实现的关联容器,它要求键是有序的,因此在插入、查找和删除元素时需要进行键的比较。默认情况下,对于内置类型的键,std::map 使用 < 运算符来进行比较;而对于自定义类型的键,则需要通过重载运算符来定义比较规则。
// 自定义类型,重载,遍历
class Point {public:int x;int y;bool operator == (const Point& other) const {return (x == other.x) && (y == other.y);}bool operator < (const Point& other) const {if(x == other.x) {return y < other.y;}return x < other.x;}
};for (map<Point, int>::iterator it = points.begin(); it != points.end(); ++it)
map
//insert:插入元素到 set 中。
set<int> mySet;
mySet.insert(10);//erase:从 set 中删除指定元素。
mySet.erase(10);//find:查找指定元素,返回指向该元素的迭代器
auto it = mySet.find(20);
if (it != mySet.end()) {// 找到元素
} else {// 未找到元素
}//count:计算 set 中某个值的出现次数(由于 set 中元素唯一,因此返回值只能是 0 或 1)
int occurrences = mySet.count(20);//size:返回 set 中元素的数量
int size = mySet.size();//empty:检查 set 是否为空
if (mySet.empty()) {// set 为空
} else {// set 不为空
}//clear:清空 set 中的所有元素
mySet.clear();//lower_bound 和 upper_bound:在有序集合中执行二分查找操作
auto lower = mySet.lower_bound(15); // 返回第一个不小于 15 的元素的迭代器
auto upper = mySet.upper_bound(25); // 返回第一个大于 25 的元素的迭代器//begin 和 end:返回指向第一个和最后一个元素的迭代器,用于遍历 set
for (auto it = mySet.begin(); it != mySet.end(); ++it) {// 使用 *it 访问元素值
}
控制输出格式
#include <iomanip>
cout << fixed << setprecision(3) << ans;
#include <stack>
stack<int> s;
s.push(5);  // 将元素 5 压入栈顶
s.pop();    // 弹出栈顶元素
if (!s.empty()) {int topElement = s.top();  // 获取栈顶元素
}
矩阵运算

矩阵运算的话,一般都往顺序上想想,复杂度会降。
复杂度和矩阵的规模有关系,[i,k] X [k,j] 复杂度 = i * k *j
然后矩阵的运算是三层循环,i,j,k,前两层一个是左行,一个是右列,k是控制每行每列的的每一个
正常:ans[i][j] += Q[i][k] * t[k][j];
转置:ans[i][j] += Q[k][i] * t[k][j]; (行列互换)

对象数组
class Tree{public:int flag = 0;//是否发生掉落 int sum;//果总数 
};
vector<Tree> Trees;Tree newtree;
cin >> newtree.sum;
Trees.push_back(newtree);
// 循环数组
if(Trees[((i-1) + N) % N].flag && Trees[((i+1) + N) % N].flag)

稳定的排序

//冒泡排序
void bubbleSort(std::vector<int>& arr) {int n = arr.size();for (int i = 0; i < n-1; i++) {for (int j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {std::swap(arr[j], arr[j+1]);}}}
}
// 插入排序
void insertionSort(std::vector<int>& arr) {int n = arr.size();for (int i = 1; i < n; i++) {int key = arr[i];int j = i-1;while (j >= 0 && arr[j] > key) {arr[j+1] = arr[j];j--;}arr[j+1] = key;}
}
//归并排序
void merge(std::vector<int>& arr, int l, int m, int r) {int n1 = m-l+1;int n2 = r-m;std::vector<int> L(n1), R(n2);for (int i = 0; i < n1; i++) {L[i] = arr[l+i];}for (int j = 0; j < n2; j++) {R[j] = arr[m+1+j];}int i = 0, j = 0, k = l;while (i < n1 && j < n2) {if (L[i] <= R[j]) {arr[k++] = L[i++];} else {arr[k++] = R[j++];}}while (i < n1) {arr[k++] = L[i++];}while (j < n2) {arr[k++] = R[j++];}
}void mergeSort(std::vector<int>& arr, int l, int r) {if (l < r) {int m = l + (r-l)/2;mergeSort(arr, l, m);mergeSort(arr, m+1, r);merge(arr, l, m, r);}
}
二维前缀和

在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;int main() {int n, L, r, t;cin >> n >> L >> r >> t;vector<vector<int> > prefix(n + 1, vector<int>(n + 1, 0));//初始化为全0,从下标为1的位置存储 前缀和 
//	vector<int> prefix(n, 0);int temp = 0; for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){cin >> temp;prefix[i][j] = prefix[i - 1][j] + prefix[i][j - 1] - prefix[i - 1][j - 1] + temp;}}int sum, ans = 0;int x1,y1,x2,y2;for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){x1 = max(1, i - r);y1 = max(1, j - r);x2 = min(n, i + r);y2 = min(n, j + r);sum = prefix[x2][y2] - prefix[x2][y1 - 1] - prefix[x1 - 1][y2] + prefix[x1 - 1][y1 - 1];if((x2 - x1 + 1) * (y2 - y1 + 1) * t >= sum) ans++;}}cout << ans << endl;return 0;
}
区间分段

区间分段a[i], a[i+1] )时f(x) = i ;当它在[ kr, (k+1)r )时,g(x) = k;

#include<iostream>
#include<algorithm>
using namespace std;const int M=1e5;
int A[M];int main(){int n,N;cin>>n>>N;A[0]=0;int r=N/(n+1);for(int i=1;i<=n;i++){cin >> A[i];		}A[++n]=N;//处理最后一段A[n]到N-1long long res=0;//注意res必须为long long否则溢出出错int f=0;int left,mid,right;for(int i=1;i<=n;i++){//分大段,每次走到f+1的位置left=A[i-1];right=A[i]-1;//注意要-1if((left/r)!=(right/r)){//该大段内有多个g值for(mid=left+(r-left%r-1);mid<=right;mid+=r){//分小段,每次走到g+1的位置res+=abs((left/r-f)*(mid-left+1));//mid前为旧g,mid后为新gleft=mid+1;}res+=abs((right/r-f)*(right-left+1));//处理最后一小段}else{//该大段g相同,不用分小段res+=abs((left/r-f)*(right-left+1));}f++;}cout<<res;return 0;
}
差分数组

在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 4e5+10;int main()
{int n,m,k;int b[N];//差分数组cin >> n >> m >> k;int t, c;for(int i = 1; i <= n; i++){cin >> t >> c;int left = t - c + 1;//定义左边界left = left > 0 ? left : 1;int right = t;//定义右边界//left ~ right之间的数都+1b[left]++;b[right+1]--;}//前缀和操作,得到各个点的数值for(int i = 1; i <= N; i++){b[i] = b[i-1] + b[i];}while(m--){int x;cin >> x;cout << b[x+k] << endl;//直接得到x+k处的数值}return 0;
}
岛屿问题
/* CCF202109-2 非零段划分 */
//1、差分法(先消去相邻重复元素,再从unique后的数组第一位到最后一位,依次比较数字与相邻数的大小,并对d操作) 
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+2,num=1e4+2;
int a[maxn],d[num]={0};
int main(){int n;cin >> n;for(int i=1;i<=n;i++) cin>>a[i];a[0]=a[n+1]=0;int k=unique(a,a+n+2)-a-1;//k为序列去重后,最后一个元素(0)的数组下标 //unique(a, a+n+2) 返回的是一个指向去重后数组的新的"逻辑尾部"的指针,//然后通过减去 a 的地址,得到了去重后数组的长度。这样就可以得到去重后的数组的长度 k。/*想象成海平面问题,海平面一开始为num高,慢慢往下降的时候会有岛屿露出来如果第i个岛屿比他两边岛屿海拔都高 ,则降到a[i]高度时岛屿数量++如果第i个岛屿比他两边岛屿都低,则降到a[i]高度时,第i个岛屿将左右两边的岛屿连到一起,岛屿数量--如果第i个岛屿比他一边岛屿高,一边岛屿低,则降到a[i]时,岛屿数量不变 */for(int i=1;i<k;i++){if(a[i]>a[i-1]&&a[i]>a[i+1]) d[a[i]]++;else if(a[i]<a[i-1]&&a[i]<a[i+1]) d[a[i]]--;}int res=0;int sum=0;//d[i]表示海平面降到i的高度时,岛屿数量的变化,从大到小求后缀和,后缀和最大即为结果 for(int i=num;i>=0;i--){sum+=d[i];res=max(res,sum);}cout<<res;return 0;
} 
自定义多种优先级排序

在结构体中,根据题目意思,按照时间、类型、编号的先后顺序,分别对时间从小到大排序,先还后取,编号从小到大排序;

#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
const int N = 1e4+10;
int n,k;
struct node{int t;//记录时间int type;//记录操作类型,用0代表取钥匙,1代表还钥匙int id;//记录编号bool operator < (const node p)const{if(t!=p.t)return t<p.t;//首先判断时间,按照时间从小到大进行排序if(p.type!=type)return type>p.type;//再判断类型,按照还钥匙优先排序return id<p.id;//再判断编号,按照编号从小到大进行排序}
}p[N];
int q[N];
int main()
{cin>>n>>k;int id,start,len;int j=1;//记录结构体中有多少个元素,用于排序;for(int i=1;i<=n;i++)q[i]=i;//初始化钥匙盒for(int i=1;i<=k;i++){cin>>id>>start>>len;p[j++]={start,0,id};//将取钥匙操作加入结构体p[j++]={start+len,1,id};//将还钥匙操作加入结构体,还钥匙时间为start+len}sort(p+1,p+j+1);//排序for(int i=1;i<=j;i++){int  t =p[i].id;if(p[i].type==0)//取钥匙;{for(int k=1;k<=n;k++)//循环找到对应的钥匙号{if(q[k]==t){q[k]=0;break;}}}else//放钥匙;{for(int k=1;k<=n;k++)//循环找到第一个空位置{if(q[k]==0){q[k]=t;break;}}}}for(int i=1;i<=n;i++)cout<<q[i]<<" ";cout<<endl;return 0;
}
背包

在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某国投集团知识竞赛活动方案

一、抽签分组办法 1.抽签&#xff1a;参赛队伍赛前进行抽签分组。 2.分组&#xff1a;全部报名参赛队伍按照抽签顺序分为4组&#xff0c;每组7支队伍进行预赛&#xff0c;9月16日上午1、2组进行初赛&#xff0c;9月16日下午3、4组进行初赛。每组决出的前三名进入决赛。 二、初…

二维码门楼牌管理应用平台建设:引领现代化小区管理新篇章

文章目录 前言一、二维码门楼牌管理应用平台概述二、三维动态单体化技术的优势三、二维码门楼牌管理应用平台的应用场景四、展望未来 前言 随着城市化的快速推进&#xff0c;现代化小区如雨后春笋般涌现&#xff0c;对小区管理的效率和智能化提出了更高要求。二维码门楼牌管理…

鸿蒙OS开发实例:【瀑布流式图片浏览】

介绍 瀑布流式展示图片文字&#xff0c;在当前产品设计中已非常常见&#xff0c;本篇将介绍关于WaterFlow的图片浏览场景&#xff0c;顺便集成Video控件&#xff0c;以提高实践的趣味性 准备 请参照[官方指导]&#xff0c;创建一个Demo工程&#xff0c;选择Stage模型熟读Har…

图像分割论文阅读:Automatic Polyp Segmentation via Multi-scale Subtraction Network

这篇论文的主要内容是介绍了一种名为多尺度差值网络&#xff08;MSNet&#xff09;的自动息肉分割方法。 1&#xff0c;模型整体结构 整体结构包括编码器&#xff0c;解码器&#xff0c;编码器和解码器之间是多尺度差值模块模块&#xff08;MSM&#xff09;&#xff0c;以及一…

Vue3 使用 v-bind 动态绑定 CSS 样式

在 Vue3 中&#xff0c;可以通过 v-bind 动态绑定 CSS 样式。 语法格式&#xff1a; color: v-bind(数据); 基础使用&#xff1a; <template><h3 class"title">我是父组件</h3><button click"state !state">按钮</button>…

牛客NC31 第一个只出现一次的字符【simple map Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c 核心 Map参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*…

INA350ABSIDDFR 仪表放大器 单路低功耗 TSOT-23-8

NA350ABSIDDFR 是一款高精度、低功耗、单片式精密运算放大器。它具有出色的直流精度和低失调电压&#xff0c;适用于需要高精度信号处理的应用。这款产品广泛应用于各种领域&#xff0c;如工业控制、医疗设备、测试与测量设备以及通信系统等。 制造商: Texas Instruments …

思维题,LeetCode331. 验证二叉树的前序序列化

一、题目 1、题目描述 序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时&#xff0c;我们可以记录下这个节点的值。如果它是一个空节点&#xff0c;我们可以使用一个标记值记录&#xff0c;例如 #。 例如&#xff0c;上面的二叉树可以被序列化为字符串 &quo…

3.恒定乘积自动做市商算法及代码

中心化交易所的安全风险 在中心化交易所中注册账户时&#xff0c;是由交易所生成一个地址&#xff0c;用户可以向地址充币&#xff0c;充到地址之后交易所就会根据用户充币的数量显示在管理界面中。但是充币的地址是掌管在交易所之中的&#xff0c;资产的控制权还是在交易所。…

从0开始搭建基于VUE的前端项目(二) 安装和配置element-ui组件库

版本和地址 ElementUI 2.15.14 (https://element.eleme.io/)按需引入的插件 babel-plugin-component(1.1.1) https://github.com/ElementUI/babel-plugin-component安装 npm install element-ui完整引入(不建议) 这种方式最后打包的源文件很大,造成网络资源的浪费main.jsimpo…

MFC(二)集成基础控件

目录 OnCreateCStatic【标签&#xff0c;图片】CEdit【文本框&#xff0c;密码框&#xff0c;数值框&#xff0c;文本区】CButton【按钮&#xff0c;单选按钮&#xff0c;多选按钮】CComboBox【下拉列表&#xff0c;列表】CSliderCtrl【滑动条】CListCtrl【表格】CAnimateCtrl【…

C语言分支循环探秘:解锁编程逻辑的无限可能 篇章1

目录 1.if语句 2.关系操作符 3.条件操作符 4.逻辑操作符&#xff1a;&&&#xff0c;||&#xff0c;&#xff01; 5.switch语句 6.while循环 7.for循环 8.do-while循环 9.break和continue语句 10.循环的嵌套 11.goto 导入 C语言是结构化的程序设计语言&…

数字化服务升级:数字乡村改善农民生活质量

随着信息技术的迅猛发展&#xff0c;数字化浪潮已经深入社会的各个角落&#xff0c;为人们的生活带来了翻天覆地的变化。在乡村地区&#xff0c;数字化服务的升级正在逐步改变农民的生活方式&#xff0c;提高他们的生活质量。本文将围绕数字化服务升级&#xff0c;探讨数字乡村…

【蓝桥杯选拔赛真题51】C++百位上的数字 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C百位上的数字 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C百位上的数字 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 给定一个三位数&#xff0c…

京东云免费服务器申请入口,2024年最新免费云主机

京东云服务器免费6月申请入口 jdyfwq.com 在京东云免费云主机申请页面&#xff0c;免费云服务器配置为云主机2核4G5M和轻量云主机2C2G可以申请免费使用&#xff0c;目前京东云免费云服务器申请时长从之前的6个月缩短到1个月&#xff0c;如下图&#xff1a; 京东云免费云主机 云…

【Java】MyBatis快速入门及详解

文章目录 1. MyBatis概述2. MyBatis快速入门2.1 创建项目2.2 添加依赖2.3 数据准备2.4 编写代码2.4.1 编写核心配置文件2.4.2 编写SQL映射文件2.4.3 编写Java代码 3. Mapper代理开发4. MyBatis核心配置文件5. 案例练习5.1 数据准备5.2 查询数据5.2.1 查询所有数据5.2.2 查询单条…

Cisco ISR 4000 Series IOS XE Release IOSXE-17.13.1a ED

Cisco ISR 4000 Series IOS XE Release IOSXE-17.13.1a ED 思科 4000 系列集成服务路由器系统软件 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-isr-4000/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 无耻抄…

Redis数据结构的基础插入操作

数据结构与内部编码 Redis常见的数据结构 数据结构和内部编码 数据结构的插入操作 在Redis中&#xff0c;数据结构的插入操作取决于你要插入的数据类型。以下是一些常见的数据结构和它们的插入操作&#xff1a; 字符串 (String)&#xff1a;使用 SET 命令来插入字符串。例…

yolov5+关键点检测实现溺水检测与警报提示(代码+原理)

往期热门博客项目回顾&#xff1a; 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 //正文开始&#xff01; 人…

小狐狸ChatGPT付费AI创作系统V2.8.0独立版 + H5端 + 小程序前端

狐狸GPT付费体验系统的开发基于国外很火的ChatGPT&#xff0c;这是一种基于人工智能技术的问答系统&#xff0c;可以实现智能回答用户提出的问题。相比传统的问答系统&#xff0c;ChatGPT可以更加准确地理解用户的意图&#xff0c;提供更加精准的答案。同时&#xff0c;小狐狸G…