中石大第四次CSP集训作业知识点简要整理(逐题整理)

A.金币

    vector<int> v;//动态数组的声明

    v.push_back(e);//动态数组尾插函数

    v.size();//动态数组的大小


B.文字处理软件

    string s;//字符串的声明

    s=s1+s2;//字符串的赋值与拼接

    sub=s.substr(begin,len);//子串函数

    s.insert(pos,str);//插入函数

    found=s.find(str);//查找子串函数

C.字典排序

算法:预处理-排序

    s1>s2;//字符串的比较(字典序)

    vector<string> v;//字符串数组的声明  

    sort(v.begin(),v.end());//字符串数组排序(字典序)

D.[模板]字符串哈希

    map<string,int> mp;//map的声明(string-int键值对)

    mp[s]++;//本题作为s的计数(如果第一次出现,会先默认为0)

    mp.size();//map中键值对个数

E.明明的随机数

    set<int> st;//集合的声明(int类型)

    st.insert(e);//集合的插入

    for(auto i:st){

    }//容器的遍历(范围遍历,vector,map,set,string均适用)

F.[ABC183C] Travel

算法:枚举

    next_permutation(v.begin(),v.end())//从v的开始到结束,生成下一个字典序的排列,如果已经是最大的字典序,返回false

G.[模板]队列

应用:可用于BFS!!!

    queue<int> q;//队列的声明

    q.push(e);//入队

    q.pop();//出队

    q.front();//取队头元素

    q.empty();//判断队列是否为空

    q.size();//获取队列大小

H.[模板]堆

    priority_queue<int> PQ;//大根堆声明

    priority_queue<int, vector<int>, greater<int>> Q;//小根堆声明

    q.push(e);//入堆

    q.pop();//出堆(最值)


I.家谱

应用:map可以用于图论!!!(比什么链表节点XXX表示法啥的好用多了)

    fa.find(e);//查找函数,返回map中e的迭代器,如果没有,返回fa.end(),vector,map,set,string均可用


J. [CCC2021 J5/S2] Modern Art

算法:直接分析-规律性-周期


K.矩阵乘法

算法:数学-线性代数


L.[ABC346C] Σ

算法:相关问题-正难则反

    n=unique(v.begin(),v.end())-v.begin();//去重函数,前提是序列要先有序,返回的是去重后指向最后一个元素的迭代器,减去v.begin()之后就是去重后的元素个数

M.A-B 数对

算法:相关问题-预处理(关联问题)


N.[ABC345C] One Time Swap

算法:相关问题-正难则反;数学-排列组合


O.合并果子

算法:子问题-贪心(哈夫曼树);相关问题-预处理-数据结构

    q.top();//获取堆顶元素(最值)

P.[ABC353C] Sigma Problem

算法:子问题-分治-二分(其实有STL);子问题-分类处理

    int p=lower_bound(v.begin(),v.end(),x)-v.begin();//返回指向第一个不小于x的迭代器,减去v.begin()之后就是索引,前提是序列必须有序!因此set,map均可使用,因为这两种容器本身有序

Q.集合

算法:纯思维;数学-数列/集合论

    st.find(e);//返回集合中指向e的迭代器,如果没有返回st.end()

我使用的代码模板

    #include<bits/stdc++.h>//万能头
    #define endl '\n'//换行符代替endl,速度更快
    #define int int long long//int作为long long
    #define pb push_back//pb缩写代替push_back
    #define bs bitset//二进制操作位图
    #define val(a) (a<'a' ? (a-'A'+'a') : a)//大写字母转换函数
    using namespace std;//命名空间
    typedef pair<char,int> PCI;//char-int 对
    typedef pair<int,int> PII;//int-int 对
    typedef priority_queue<int> PQ;//优先队列(大根堆)
    typedef priority_queue<int, vector<int>, greater<int>> Q;//优先队列(小根堆)

    const int N = 2e5+10, MAX = 1e9, INF = -1e9;//数组最大值,最大值,最小值(随题意修改)

    signed main()//因为int代替long long,主函数用signed代替
    {
        ios::sync_with_stdio(false);
        cin.tie(0);//解除限制,读写速度更快
        


        return 0;
    }
posted @ 2025-01-17 18:35  Oaths  阅读(136)  评论(0)    收藏  举报