蓝桥杯cpp算法笔记

        从 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的应用其实也还不是很熟,还有字符串的处理又开始生疏了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

01bigdata

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值