从 2月份开始意识到自己对cpp和算法没有放过太多精力去学,又因为后面不管是读研机试,还是可能找工作,都需要一定的算法知识,意识到这个问题就决定新开这篇文章进行一点记录,希望大佬们可以给一点建议。
2025.2.22 蓝桥杯一题
蓝桥杯 17153班级活动
//蓝桥杯题库 17153
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int id_list[n]={0};
int sum_1=0;
int sum_rg2=0;
for(int i=0;i<n;i++){
int temp;
cin>>temp;
id_list[temp-1]+=1;
}
for(int i=0;i<n;i++){
if (id_list[i]==1)
sum_1+=1;
if (id_list[i]>2)
sum_rg2+=id_list[i]-2;
}
if (sum_rg2>sum_1)
cout<<sum_rg2;
else
cout<<sum_rg2+(sum_1-sum_rg2)/2;
}
2025.2.23 蓝桥杯一题,算法数组基础知识
数组实现设计cpp类知识
#include <iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
//数组实现
class Array
{
private:
int *mpArr; //指针指向可扩容的数组内存
int mCap; //数组的容量
int mCur; //数组有效元素个数
public:
Array(int size=10): mCur(0),mCap(size)
{
mpArr = new int[mCap]();
};
//不用的时候把占用的外部内存释放
~Array()
{
delete []mpArr;
};
public:
//末尾增加元素
void push_back(int val){
if (mCur==mCap){
expand(2*mCap);
}
mpArr[mCur++] = val;
};
//末尾删除元素
void pop_back(){
if (mCur==0){
return;
}
mCur--;
};
//按位置增加元素
void insert(int pos, int val){
//有效位判断
if (pos<0||pos>mCur)
{
return; //抛出pos invalid
}
//判断是否满了
if(mCur==mCap){
expand(2*mCap);
}
//移动元素
for(int i= mCur-1;i>=pos;i--){
mpArr[i+1] = mpArr[i];
}
mpArr[pos]=val;
mCur++;
};
//按位置删除
void erase(int pos){
if(pos<0||pos>=mCur){
return;
}
for (int i=pos+1;i<mCur;i++){
mpArr[i-1] = mpArr[i];
}
mCur--;
};
//按元素查询
int find(int val){
for(int i =0;i<mCur;i++){
if(mpArr[i]==val){
return i;
}
}
return -1;
};
//打印数据
void show()const
{
for(int i=0;i<mCur;i++)
{
cout<<mpArr[i]<<" ";
}
cout<<endl;
}
private:
//内部数组扩容接口 时间复杂度O(n)
void expand(int size)
{
int*p = new int[size];
memcpy(p,mpArr,sizeof(int)*mCap);
delete[]mpArr;
mpArr = p;
mCap = size;
}
} ;
int main(){
Array arr;
srand(time(0));
for(int i=0;i<10;i++){
arr.push_back(rand()%100);
}
arr.show();
arr.pop_back();
arr.show();
arr.insert(0,100);
arr.show();
arr.insert(10,200);
arr.show();
int pos = arr.find(100);
if (pos!=-1){
arr.erase(pos);
arr.show();
}
}
蓝桥杯 1922单词逆序
#include<iostream>
#include<string.h>
#include<sstream>
#include<algorithm>
using namespace std;
//反转函数
//void Reverse(char arr[],int size){
// char *p = arr;
// char *q = arr+size-1;
// while (p<q){
// char ch = *p;
// *p = *q;
// *q = ch;
// p++;
// q--;
// }
//}
int main()
{
int n;
cin>>n;
cin.ignore(); //忽略换行符
for(int i=0;i<n;i++){
int N;
cin>>N;
cin.ignore();
for(int j=0;j<N;j++){
string line;
getline(cin,line);
stringstream ss(line);
string word;
bool first = true;
while(ss>>word){ // 逐个单词处理
//char arr[word.size()+1]; // 创建字符数组存储单词
//strcpy(arr,word.c_str());// 将单词复制到字符数组
//Reverse(arr, strlen(arr));// 逆序单词
reverse(word.begin(),word.end());
if (!first){
cout<<" ";
}
cout<<word;
first = false;
}
cout<<endl;
}
if (i!=n-1) {
cout<<endl;
}
}
return 0;
}
小总结:
一开始感觉是看一个b站的基础课,但是感觉cpp算法在蓝桥杯上,是不是考虑直接学调用函数和库会快一点,因为在单词逆序中写的那道题,感觉直接从algorithm.h调用reverse会比自己手搓快一点,而且后面还有一些stl的方法也会便捷一点。
2025.2.24 蓝桥杯三题,一些基础函数使用
输入输出
//#include<iostream>
//#include<iomanip>
#include <bits/stdc++.h>
using namespace std;
void example1(){
char s[15];
scanf("%[^\n]",s); //[]中是正则表达式,表示不回车就读进去
printf("%s",s);
}
void example2(){
double a,b;
cin >> a >> b;
// 需要导入头文件 <iomanip>
cout << fixed << setprecision(3) << a <<' ' << b <<'\n'; //保留三位小数
}
void example3()
{
string s;
getline(cin,s); //cin输入字符串遇到空格和回车就结束,因此读取一整句话用getline
cout<<s;
}
//取消同步流
void example4(){
//取消同步流操作
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
//其他
int x;
cin>>x;
cout<<x<<'\n';
}
int main() {
example4();
return 0;
}
字符串的基本函数(感觉这里自己还是要多看几遍)
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
void example1(){
//初始化字符串
string str2= "hello world";
//选取部分赋值
string str3 = str2.substr(0,5); //第一个参数是起始位置,第二个参数是长度
//使用字符数组初始化字符串
const char *charArray="hello";
string str4(charArray);
//使用重复字符串初始化;
string str5(5,'A'); //第一个参数是个数,第二个是字符
cout<<str2<<'\n';
cout<<str3<<'\n';
cout<<str4<<'\n';
cout<<str5<<'\n';
}
void example2(){
char buf[100];
scanf("%s",buf);
string str1(buf);
printf("%s\n",str1.c_str()); //用printf输出时,需要将string转换为C风格的字符串输出
}
//基本操作
void example3(){
string str1="hello world";
int length = str1.length(); //获取字符串长度
cout<<length<<endl;
//拼接字符串 +或者append
string str2 = "xixi";
string result1 = str2+','+str1;
string result2 = str1.append(",").append(str2);
cout<<result1<<endl;
cout<<result2<<endl;
//字符查找
size_t pos = str1.find("world");
if(pos != string::npos){
cout<<pos<<endl;
} else{
cout<<"can not find it"<<endl;
}
//字符串替换
str1.replace(7,5,"big"); //第一个参数是字串的起始位置,第二个位置是长度,第三个是替换的字符串
cout<<str1<<endl;
//提取字符串
string substr1 = str1.substr(7,5);
cout<< substr1<<endl;
//字符串比较
int result3 = str1.compare(str2); //比较是按字典序比较方法从小到大一个一个比,一旦遇到不相等字符,就确定大小关系
cout<<result3<<endl;
}
void example4(){
string s = "hello";
for(int i=0;i<s.length();++i) cout<<s[i];
cout<<endl;
for(auto i:s){
cout<<i; //仅仅是拷贝s
i='a';
}
cout<<endl;
for (auto &i:s){
cout<<i; //修改s
i='a';
}
cout<<endl;
cout<<s;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); // 取消同步输出
//example1();
//example3();
//example4();
}
排序
#include<bits/stdc++.h> //万能头文件
#include<algorithm>
#include<iostream>
using namespace std;
void example1(){
int a[1000];
int n;
cin>>n;
for(int i =0;i<n;i++) cin>>a[i];
sort(a,a+n); //sort(起始位置,结束位置的下一位)左闭右开
for(int i=0;i<n;i++) cout<<a[i]<<' ';
}
void example2(){
vector<int> v ={5,1,3,9,11};
sort(v.begin(),v.end());
for(int i =0;i<v.size();i++) cout<<v[i]<<' ';
cout<<endl;
for (auto i:v) cout<<i<<' ';
}
//自定义比较函数
bool cmp(const int &u,const int &v){
return u>v;
}
void example3(){
vector<int> v ={5,1,3,9,11};
sort(v.begin(),v.end(),cmp);
for (auto i:v) cout<<i<<' ';
}
//lambda表达式
void example4(){
vector<int> v ={5,1,3,9,11};
sort(v.begin(),v.end(),[](const int&u,const int&v){
return u>v;
});
for (auto i:v) cout<<i<<' ';
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
//example1();
//example2();
example4();
}
最值查找
#include<stdio.h>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
//min和max传入两个值或者一个列表
//min_element和max_element 传入参数为两个地址或者迭代器
void example1(){
vector<int> v = {5,1,3,9,11};
cout<<max(3,5)<<endl;
cout<<min({1,2,3,4})<<endl;
//输出最大元素,*表示解引用,通过地址得到值
cout<<*max_element(v.begin(),v.end())<<endl;
}
//nth_elemenet(st,k,ed) 进行部分排序,
void example2(){
vector <int> v ={5,1,7,4,2,6,9};
nth_element(v.begin(),v.begin()+3,v.end());
for(auto &i :v) cout<<i<<' ';
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
//example1();
example2();
}
二分查找
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
//二分查找 数组元素是单调的
//binary_search返回bool值
void example1(){
int target = 5;
vector<int> numbers={1,3,5,7,9};
bool found = binary_search(numbers.begin(),numbers.end(),5);
if (found) {cout<<"find it!"<<endl;
}else{cout<<"not find it";
}
}
//需要返回位置用lower_bound或者upper_bound
//数组必须降序,要在非升序函数,需要修改比较函数
//lower_bound 返回第一个大于等于元素的地址
// upper_bound 返回第一个大于元素的地址
//不存在则返回最后一个元素的下一个位置
void example2(){
vector<int> v ={5,1,7,3,10,18,9};
sort(v.begin(),v.end());
for(auto &i:v)cout<<i<<' ';
cout<<endl;
cout<<(lower_bound(v.begin(),v.end(),8)-v.begin())<<'\n';
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
example2();
}
大小写转换
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
//islower/isupper 判断字母大小写,返回bool类型
void example1(){
char ch1='a';
char ch2='A';
cout<<islower(ch1)<<endl;
cout<<isupper(ch1)<<endl;
}
//tolower/toupper转换大小写字母
void example2(){
char ch1='a';
char ch2='A';
ch1 = toupper(ch1);
cout<<ch1<<endl;
}
//char 是8bit 2^8种,256个字符。
void example3(){
char ch = 'A';
char ch2;
ch2 = ch-'A'+'a';
cout<<ch2<<endl;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
example3();
}
全排列
#include<iostream>
#include<algorithm>
using namespace std;
//next_permutation() 用于生成当前序列的下一个排列
void example1(){
vector<int> nums={1,2,3};
for (auto i:nums) cout<<i<<' ';
cout<<endl;
//要求第一个排列是最小的,才能生成所有的
while(next_permutation(nums.begin(),nums.end())){
for (auto i:nums) cout<<i<<' ';
cout<<endl;
}
}
//prev_permutation() 用于生成当前序列的上一个排列
void example2(){
vector<int> nums={3,2,1};
for (auto i:nums) cout<<i<<' ';
cout<<endl;
//要求第一个排列是最大的,才能生成所有的
while(prev_permutation(nums.begin(),nums.end())){
for (auto i:nums) cout<<i<<' ';
cout<<endl;
}
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
example2();
}
其他函数
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
//memset(void* ptr,int value, size_t num)用于设置内存块值函数
//第一个参数是指针,第二个是值,第三个是重置的大小
//对非字符类型的数组可能会产生未定义的行为
void example1(){
int arr[10];
memset(arr,0,sizeof(arr));
for(auto i:arr) cout<<i<<' ';
}
//swap(a,b)交换两个变量
void example2(){
int a=10;
int b=20;
swap(a,b);
cout<<a<<endl<<b<<endl;
}
//reverse()反转元素顺序,两个参数,一个是第一个元素迭代器,另一个是最后一个下一个的迭代器
void example3(){
vector<int> v={1,2,3,4,5};
reverse(v.begin(),v.end());
for (auto i:v) cout<<i<<' ';
}
//unique()用于去除容器中/*相邻*/重复元素的函数
void example4(){
vector<int> v={1,1,2,2,3,3,4,4,5,5};
auto it = unique(v.begin(),v.end());
v.erase(it,v.end());
for (auto i:v) cout<<i<<' ';
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
example4();
}
蓝桥杯1265排序
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+3;
int a[N];
int main()
{
ios::sync_with_stdio(0),cin.tie(0);
int n;
cin>>n;
for (int i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)cout<<a[i]<<" \n"[i==n-1];
//for(int i=n-1;i>-1;i--)cout<<a[i]<<" \n"[i==0];
sort(a,a+n,[](const &u,const &v){
return u>v;
});
for(int i=0;i<n;i++)cout<<a[i]<<" \n"[i==n-1];
return 0;
}
蓝桥杯497成绩分析
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4+9;
int a[N];
int main()
{
// 请在此输入您的代码
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
cout<<*max_element(a,a+n)<<endl;
cout<<*min_element(a,a+n)<<endl;
long long sum = 0;
for(int i=0;i<n;i++) sum+=a[i];
cout<<fixed<<setprecision(2)<<1.0*sum/n<<endl;
return 0;
}
蓝桥杯1389二分查找数组
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int data[200];
for(int i = 0 ; i < 200 ; i ++)data[i] = 4 * i + 6;
int target;
cin>>target;
cout<<lower_bound(data,data+200,target)-data<<endl;
return 0;
}
小总结:昨天学的内容还是相对来说比较基础一点,今天开始会学stl的应用,去年这个时候其实有接触了一点,只不过就是基础不好又看文档学的,然后导致现在基础也不好。昨天的内容,比较都是比较常用的,第一天对于输入输出都还不是很懂,不过字符串的函数库调用可能要针对做一点题目才能更好调用函数,最值查找和二分查找也是要做一点习题,也有印象哪里出现,之前上课是有讲过一些原理,还是比较有印象的,全排列在递归有看过,其他函数的memset挺常见,但是自己没有系统学过cpp,就还是不是很清楚哪里见过
2025.2.25 stl的vector和pair
pair
#include <iostream>
#include<utility>
#include<string>
#include<vector>
#include<algorithm>
//#include<bits/stdc++.h>
using namespace std;
//pair类有两个模板参数,第一个 值和第二个 值的类型
void example1(){
pair<int,double> p1(1,3.14);
pair<char,string> p2('a',"hello");
cout<<p1.first<<' '<<p1.second<<endl;
cout<<p2.first<<' '<<p2.second<<endl;
}
//pair的嵌套
void example2(){
pair<int,int> p1(1,2);
pair<int,pair<int,int>> p2(3,make_pair(4,5));
pair<pair<int,int>,pair<int,int>> p3(make_pair(6,7),make_pair(3,4));
cout<<p1.first<<' '<<p1.second<<endl;
cout<<p2.first<<' '<<p2.second.second<<endl;
cout<<p3.second.first<<' '<<p3.first.second<<endl;
}
//pair自带排序规则 先按照first升序再按second排序
//其他规则就需要用lambda表达式或者其他方法写排序规则
void example3(){
vector<pair<int,int>> vec;
vec.push_back(make_pair(3,2));
vec.push_back(make_pair(4,1));
vec.push_back(make_pair(1,3));
sort(vec.begin(),vec.end());
for (const auto& p :vec) cout<<p.first<<' '<<p.second<<endl;
}
struct Person{
string name;
int age;
};
void example4(){
vector<Person> people;
people.push_back({"lili",20});
people.push_back({"liri",23});
people.push_back({"lali",21});
vector <pair<Person,int>> scores;
scores.push_back({people[0],90});
scores.push_back({people[1],80});
scores.push_back({people[2],70});
for(const auto& pair:scores){
cout<<"name: "<<pair.first.name<<endl;
cout<<"age: "<<pair.first.age<<endl;
cout<<"score: "<<pair.second<<endl;
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
example4();
}
vector
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//存储相同类型元素的动态数组容器
//常用函数
void example1(){
vector<int> vec={1,2,3};
//push_back()
vec.push_back(4);
for(const auto i :vec) cout<<i<<' ';
cout<<endl;
//pop_back()
if (!vec.empty()) vec.pop_back();
for(const auto i :vec) cout<<i<<' ';
cout<<endl;
//迭代器 和insert()
vec.insert(vec.begin()+2,8) ;
for (auto it = vec.begin();it != vec.end();it++) cout<<*it<<' ';
cout<<endl;
}
//排序去重
void example2(){
//排序
vector<int> vec={2,4,5,1,1,6,3,3,5,1};
sort(vec.begin(),vec.end());
for (auto it = vec.begin();it != vec.end();it++) cout<<*it<<' ';
cout<<endl;
//去重 ,需要排序完才去重
auto last = unique(vec.begin(),vec.end());
vec.erase(last,vec.end());
//合并
//vec.erase(unique(vec.begin(),vec.end()),vec.end())
for (auto it = vec.begin();it != vec.end();it++) cout<<*it<<' ';
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
example1();
example2();
}
我记得那天好像搞啥了东西,然后就,不过这几天有点偷偷摸鱼了,想起来了,去玩esp32了
2025.2.26 蓝桥杯一题
19718回文字符串
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
cin>>n;
string lqb ="lqb";
for(int i=0;i<n;i++){
string s;
cin>>s;
int left = 0;
int right = s.length()-1;
while(left<right){
if (s[left]==s[right]){
right-=1;
left+=1;
}else{
if(lqb.find(s[right])!=string::npos) right -=1;
else{
cout<<"No"<<endl;
break;
}
}
}
if (left>=right) cout<<"Yes"<<endl;
}
}
2025.3.5 stl知识,蓝桥杯6题
list
#include <list>
#include<iostream>
#include <bits/stdc++.h>
#include <algorithm>
//list 双向性,每个节点都包含只想前一个节点和后一个节点的指针 ;动态大小;不连续存储
using namespace std;
void example1(){
//创建
list<int> mylist;
//尾部添加
mylist.push_back(1);
mylist.push_back(2);
mylist.push_back(3);
//头部插入
mylist.push_front(0);
//遍历输出
for(auto &i : mylist){
cout<< i <<" ";
}
cout<< endl;
}
//常见函数
void example2(){
list<int>mylist;
//尾部添加
for(int i =0;i<=5;++i) mylist.push_back(i);
//从头遍历输出
for(const auto &i:mylist) cout<<i<<' ';
cout<<endl;
//反转list元素
reverse(mylist.begin(),mylist.end());
for(const auto &i:mylist) cout<<i<<' ';
cout<<endl;
//在第一个元素后一个位置加0
mylist.insert(++mylist.begin(),0);
for(const auto &i:mylist) cout<<i<<' ';
cout<<endl;
//擦除某段元素
mylist.erase(mylist.begin()++,--mylist.end());
cout<<"this sizi is "<<mylist.size()<<endl;
for(const auto &i:mylist) cout<<i<<' ';
cout<<endl;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
example2();
}
stack
#include <iostream>
#include<stack>
using namespace std;
//FILO的数据结构
void example1(){
stack<int> mystack;
//插入元素
mystack.push(10);
mystack.push(20);
mystack.push(30);
mystack.push(40);
//获取栈顶元素
cout<<"顶"<<mystack.top()<<endl;
//弹出栈顶
mystack.pop();
cout<<"弹出后顶"<<mystack.top()<<endl;
//检查是否空
if (mystack.empty()){
cout<<"空"<<endl;
} else{
cout<<"不空"<<endl;
}
//获取大小
cout<<mystack.size()<<endl;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
example1();
}
queue
#include<queue>
#include<iostream>
#include<functional>
#include<bits/stdc++.h>
using namespace std;
void example1(){
queue<int> myqueue;
//队尾插入
myqueue.push(1);
myqueue.push(2);
myqueue.push(3);
//弹出队首
myqueue.pop();
//返回队首不弹出
cout<<myqueue.front()<<endl;
//返回队尾
cout<<myqueue.back()<<endl;
// empty()判空 //size返回大小
}
//priority_queue 按照优先级排序,
void example2() {
priority_queue<int, vector<int>> bpq; // 默认是大根堆
bpq.push(1);
bpq.push(5);
bpq.push(3);
// 遍历优先队列 bpq
while (!bpq.empty()) {
cout << bpq.top() << ' '; // 输出队列顶部元素
bpq.pop(); // 删除队列顶部元素
}
cout << endl;
// 定义一个小根堆
priority_queue<int, vector<int>, greater<int>> blpq;
blpq.push(1);
blpq.push(5);
blpq.push(3);
// 遍历小根堆 blpq
while (!blpq.empty()) {
cout << blpq.top() << ' '; // 输出队列顶部元素
blpq.pop(); // 删除队列顶部元素
}
cout << endl;
}
//双端队列
void example3(){
//push_back,push_front,pop_back,pop_front,back,front,empty,size,clear
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
example1();
}
set
#include <set>
#include <iostream>
#include <algorithm>
#include<functional>
using namespace std;
//set元素按照升序,内部元素唯一,内部实现了红黑树
void example1(){
set<int, greater<int>> myset;
myset.insert(25);
myset.insert(5);
myset.insert(17);
myset.insert(42);
myset.insert(39);
for (const auto &i : myset){
cout<< i<<' ';
}
cout<<endl;
}
//multiset允许存储重复的元素
void example2(){
multiset<int> mymset;
mymset.insert(12);
mymset.insert(12);
for (const auto &i : mymset){
cout<< i<<' ';
}
cout<<endl;
}
void example3(){
set<int, greater<int>> myset;
myset.insert(25);
myset.insert(5);
myset.insert(5);
myset.insert(17);
myset.insert(42);
myset.insert(39);
for (const auto &i : myset){
cout<< i<<' ';
}
cout<<endl;
//查找元素
int searchvalue = 5;
auto it= myset.find(searchvalue);
if(it != myset.end()){
cout<<"find it!"<<endl;
} else{
cout<<"can not find it!"<<endl;
}
//移除元素
int removeValue = 25;
myset.erase(removeValue);
for (const auto &i : myset){
cout<< i<<' ';
}
cout<<endl;
//清空集合
myset.clear();
if(myset.empty()) cout<<"空"<<endl;
}
void example4(){
multiset<int, greater<int>> myset;
myset.insert(25);
myset.insert(5);
myset.insert(5);
myset.insert(17);
myset.insert(42);
myset.insert(39);
for (const auto &i : myset){
cout<< i<<' ';
}
cout<<endl;
//查找元素
int searchvalue = 5;
auto it= myset.find(searchvalue);
if(it != myset.end()){
cout<<"find it!"<<endl;
} else{
cout<<"can not find it!"<<endl;
}
//移除元素(所有相同的元素)
int removeValue = 5;
myset.erase(removeValue);
for (const auto &i : myset){
cout<< i<<' ';
}
cout<<endl;
//清空集合
myset.clear();
if(myset.empty()) cout<<"空"<<endl;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
example4();
}
map
#include <map>
#include <iostream>
using namespace std;
//map关联容器,存储一组键值对,每个key是唯一的,根据key排序,由红黑树实现的
//multimap可以允许多个相同的键
void example1(){
map<int,string> myMap = {{1,"apple"},{2,"banana"},{3,"orange"}};
//插入元素
myMap.insert(make_pair(4,"grapes"));
//查找元素
cout<<myMap[2]<<endl;
//遍历打印
for(const auto &i :myMap){
cout<<"key: "<<i.first<<" value: "<<i.second<<endl;
}
//删除元素
myMap.erase(3);
//判断元素是否存在
if(myMap.count(3)==0){
cout<<"not find it"<<endl;
}
//清空
myMap.clear();
//判空
if (myMap.empty()) cout<<"空" ;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
example1();
}
蓝桥杯1113 CLZ银行问题
//1113 CLZ银行问题
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
queue<string> V;
queue<string> N;
int n;
cin>>n;
for (int i=0;i<n;i++){
string op;
cin>>op;
if(op=="IN"){
string name,q;
cin>>name>>q;
if(q=="V"){
V.push(name);
}else{
N.push(name);
}
}else{
string q; cin>>q;
if(q=="V"){
V.pop();
}else{
N.pop();
}
}
}
while(!V.empty()){
cout<<V.front()<<endl;
V.pop();
}
while(!N.empty()){
cout<<N.front()<<endl;
N.pop();
}
}
蓝桥杯471合并果子
//471合并果子
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
cin>>n;
long long ans;
priority_queue<long long,vector<long long>,greater<long long>> pq;
for(int i=0;i<n;i++){
long long j ;
cin>>j;
pq.push(j);
}
while(pq.size()>1){
long long x = pq.top();
pq.pop();
long long y = pq.top();
pq.pop();
ans += x+y;
pq.push(x+y);
}
cout<< ans<<endl;
}
蓝桥杯3255宝藏排序Ⅱ
//3255宝藏排序Ⅱ
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
cin>>n;
vector<int> vec;
for(int i=0;i<n;i++){
int d;
cin>>d;
vec.push_back(d);
}
sort(vec.begin(),vec.end());
for (const auto &j:vec){
cout<<j<<' ';
}
return 0;
}
蓝桥杯1624小蓝吃糖果
//1624小蓝吃糖果
#include <queue>
#include <algorithm>
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
priority_queue<int> pq;
long long sum =0;
for (int i =0;i<n;i++){
int x;cin>>x;
pq.push(x);
sum+=x;
}
long long mx = pq.top();
if(sum-mx>= mx-1)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
}
蓝桥杯2490小蓝的括号串1
//2490小蓝的括号串1
#include <stack>
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
const int N = 105;
int main(){
int n;
cin>>n;
stack<string> myStack;
char s[N];
cin>>s;
bool ans = true;
for (int i=0;i<n;i++){
if(s[i]=='(') myStack.push("(");
else{
if(myStack.size() &&myStack.top() =="(") myStack.pop();
else ans = false;}
}
if(myStack.size()) ans=false;
if(ans) cout<<"Yes";
else cout<<"No";
}
蓝桥杯1531快递分拣
//1531快递分拣
#include<vector>
#include<map>
#include<string>
#include<iostream>
using namespace std;
int main(){
map<string,vector<string>> mp;
vector<string> citys;
int n; cin>>n;
for (int i=0;i<n;i++){
string a,b;cin>>a>>b;
if(!mp.count(b)) citys.push_back(b);
mp[b].push_back(a);
}
for(const auto &city :citys){
cout<<city<<' '<< mp[city].size()<<endl;
for( const auto &i : mp[city]){
cout<<i<<endl;
}
}
}
今日总结:今天stl学完了,应该要开始复习算法了,其实这些stl工具+一些思维可以解决很多题,但是解决dp和暴力还是得多刷题,今天跟着课刷的题目也是比较简单一点的题目,对于这些stl的应用其实也还不是很熟,还有字符串的处理又开始生疏了。