acm复习顺序

考前拜大佬

文章目录

C语言指针总结

一个关于c++string比较的问题

//小心就是了
毕竟string有str.cmp,char a[] 也有c的strcmp:记得看看返回值

string笔记

str.substr(i,j))从下标为i截取j位,并返回
用printf输出string:printf("%s  %s \n",a.c_str(),b.c_str());
string str.length  char a[100] strlen(a)

丑憨批的set笔记

 s.insert(buf);
 s.clear();
 s.count(buf);
 set<int>::iterator it;
 it=s.begin();
        for(int i=1;i<s.size();i++)
        {
            cout<<*it<<" ";
            it++;
        }
        cout<<*it<<endl;

列车调度:

 if(s.lower_bound(buf)!=s.end())
        {
            s.erase(s.lower_bound(buf));//iterator
            s.insert(buf);
        }
string也可以用set
C++STL中的unique函数解析—unique也可以去重
重载运算符后的结构体组成set
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct A{
    int a;
    int b;
    bool operator<(const A &l1)const{
    if(this->a==l1.a){
        return this->b<l1.b;
    }else{
        return this->a<l1.a;
    }
    }
};
set<A>sa;
int main()
{
    sa.insert({1,10});
    return 0;
}

丑憨批的vector笔记

VECTOR

v.push_back(user);
v.clear();
v.erase(v.begin()+pos);///vector是可以的

queue

front():第一个
queue.back():最后一个
push
pop()
empty()
swap(queue &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。

map

插入元素
	// 定义一个map对象
	map<int, string> mapStudent;
	// 第一种 用insert函數插入pair
	mapStudent.insert(pair<int, string>(000, "student_zero"));
	// 第二种 用insert函数插入value_type数据
	mapStudent.insert(map<int, string>::value_type(001, "student_one"));
	// 第三种 用"array"方式插入
	mapStudent[123] = "student_first";
	mapStudent[456] = "student_second";
查找元素:count返回次数
	当所查找的关键key出现时,它返回数据所在对象的位置,如果沒有,返回iter与end函数的值相同。
	// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
	iter = mapStudent.find("123");
	if(iter != mapStudent.end())
	       cout<<"Find, the value is"<<iter->second<<endl;
	else
	   cout<<"Do not Find"<<endl;
刪除与清空元素
	//迭代器刪除
	iter = mapStudent.find("123");
	mapStudent.erase(iter);
	//用关键字刪除
	int n = mapStudent.erase("123"); //如果刪除了會返回1,否則返回0
	//用迭代器范围刪除 : 把整个map清空
	mapStudent.erase(mapStudent.begin(), mapStudent.end());
	//等同于mapStudent.clear()
#include <iostream>
#include<bits/stdc++.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
map<int,int>m;

int main(int argc, char** argv) {
	m[1]=2;
	cout<<m[1]<<endl;
//	cout<<m.find(1)!=m.end()<<endl;不对
	cout<<m.count(1)<<endl; 
	cout<<m.count(2)<<endl;
	cout<<m.erase(1)<<endl;
	
	return 0;
}

out:
2
1
0
1

map中自定义结构体做key要重载–以dp map mem为例
struct a{
double name;
int i;
 bool operator<(const a &l1) const{
    if(this->i==l1.i){
        return this->i<l1.i;
    }else{
        return this->name<l1.name;
    }
 }
};
map<struct a,int>memehanhan;
map<pair<double,int>,double>mem;
另外unordered_map运算更快
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define maxn 1005

struct A{
    int a,b;
    bool operator<(const A li)const{
        if(this->a==li.a)
        {
            return this->b<li.b;
        }else{
            return this->a<li.a;
        }
    }
};
map<int,A>om;
unordered_map<int,A>um;
int main()
{
    om[1]={2,2};
    um[1]={1,2};
    cout<<om[1].a<<endl;
    cout<<om.count(1)<<endl;
    return 0;
}

!!!蓝桥杯使用unordered_map 要加上:

蓝桥杯C++使用unordered_set和unordered_map报错如何处理

#include<tr1/unordered_map>//注意写法
using namespace std::tr1;//注意写法

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define maxn 1005
#include<tr1/unordered_map>//注意写法 

using namespace std::tr1;//注意写法 
struct A{
    int a,b;
    bool operator<(const A li)const{
        if(this->a==li.a)
        {
            return this->b<li.b;
        }else{
            return this->a<li.a;
        }
    }
};
map<int,A>om;
unordered_map<int,A>um;
int main()
{
    om[1]={1,2};


    return 0;
}

stack

empty()堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素

动态规划解题套路框架

一定要想好是dp(m,n)还是mem[m,n]

套路第三部分不错

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

动态规划答疑篇-最优子结构+dp 数组的遍历方向

遍历的终点一定是要求的那个值的位置!

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

状态压缩:对动态规划进行降维打击

动态规划和回溯算法到底谁是谁爹?

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

高楼扔鸡蛋

凑零钱问题

有了更新的写法,小于零直接不返回,而是在选择的时候,如果发现小于0直接就continue,连函数都不调用

各种有趣的凑零钱

最长递增子序列

第n位的最长子序列,是往前面查的第一个比他小的子序列的+1
细节细节!!!!

最长公共子序列LCS

编辑距离

1.结束有两种
2.选择三种。

两串的动态规划,都用此思路,并建立二维dptable

博弈问题

动态规划-重叠区间2020.3.30

。。。。。贪心,排结束时间

动态规划-KMP字符匹配算法

2020年蓝桥杯模拟赛2020.3.25直播笔记

第二十次CCF计算机软件能力认证总结

二分法记录

回溯法-框架+全排列+N皇后

在这里插入图片描述
结束条件是到树叶时,还是if(n>fin)的写法快乐点

回溯算法-排列/组合/子集

回溯算法-解数独

回溯算法-括号生成

主动找结束条件,另外两个特殊条件其实可以在选择时剪掉的

另外这个题用0,0作为初始值会好写很多

2020.10.04蓝桥测试

跑步训练的模拟代码,单位要小些,能量大不大于600建个分支
矩阵 用回溯应该也可以做?i是上面一行,j是下面那一行,往里面填数?选择是两个循环?

ACM取余

BFS 算法解题套路框架+几个用于BFS的set与queue用法和技巧

这才是能记录步数的关键点
在这里插入图片描述

蓝桥杯省赛总结

动态规划和回溯算法到底谁是谁爹?

2021.3.10

动态规划一般是状态和选择----》数组dp[i][j][k] dp(i,j,k) 中的ijk一般是状态,选择一般选最****的,或者统计在basecase上+…等于新的值 并用记忆数组去除重复计算(但是还是比递推容易炸)
回溯法一般是深度和选择 ------》traceback(n) fin=… 用fin控制遍历(结束)深度,把可行解输出或保存

蓝桥备赛

蓝桥备赛第一周2021.1.11 递归 枚举 位运算

前缀和

蓝桥备赛第二周 前缀和

蓝桥备赛第三周 倍增+贪心+素数+约数

蓝桥备赛第四周 同余+并查集

2021蓝桥直播课-软件类-本科组

acm公选课

蓝桥突击:素数筛+并查集+KMP+前缀和2021.4.16

2021.4.17 :
1.需要背的代码单独放到一起,虽然现在这样也能都看,但还是不日常,放到一起,没事就看
2.如果允许的话一定要至少提前3天复习:一天dp一天回溯,一天总复习

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值