做题经验(个人瞎扯淡)

分类

        一、小数据范围,需要枚举,求最大或最小值

           搜索,for循环枚举

        二、数据较大,也有枚举特征,或等差序列

           动态规划

        三、题目比较长,题中有对流程的描述

         模拟

        四、看起来像数学中的找规律题

           数论,想不出公式就递推

        五、给了一个图,找最短路径

           最短路算法

        六、给了一个图,判断图的连通性并在连通时求大或最小

        生成树

           七、在一段区间里修改或求和

        线段树、树状数组、模拟

           八、最大值最小或是最小值最大或判断一个数成不成立

        二分答案

    九、素数的判断

   枚举到根号a。

    十、中位数与最小值

   均分纸牌问题。

   十一、网络流的限流

   新建一个汇点,连一条流量为限制流量的边。

   十二、把一个数的每一位拼成一个整数

for(int i=t1;i>=1;i--)
{
    tot=tot*10+ori[i];
}

    十三、带权二分图最大匹配

   源点到左边点流量为1,费用为0;左边点到能匹配的右边点流量为1,费用为边权;左边点到汇点流量为1,费用为0。

   十四、平面图染色

   颜色=2时,如果n是基数则方案数为0,n是偶数则方案数为2。

   十五、询问一些序列中最多重复的个数

   做一个统计序列,在序列的左端点+1,右端点-1,然后做这个序列的前缀和。

   十六、bitset神器

   这玩意所占空间是相同元素个数的bool数组的1/8,运行时间是1/32(32位系统)或1/64(64位系统)。

    十七、cctype库函数

    

    

   十八、堆的复杂度计算

    log(堆的大小),与输入数据的规模无关。

   十九、nth_element(first,kth,last)函数

    使第k大元素处于第k位置,并且比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后,但不能保证他们是有序的。

    二十、long double类型函数

   在一般的cmath函数后面加一个l,否则即使传参是long double,计算的结果也是double。输入/出long double最靠谱的方式是用double类型输入/出然后转成            long double。

   二十一、位运算^

   如果a^b==2,那么a^2==b。

   二十二、数对个数

     可重:n(n-1)。不可重:n(n-1)/2。

   二十三、优先队列的comp

     大小于号方向与元素大小相反

   

#include <queue>
#include <iostream>

using namespace std;

struct cmp {
    bool operator()(int i, int j) {return i < j;}
};

int main() {
    priority_queue<int, vector<int>, cmp> q;
    for (int i = 0; i < 5; i++) {q.push(i);}
    for (int i = 0; i < 5; i++) {cout << q.top() << ' '; q.pop();}
    return 0;
}

暂时这些,想到在更。

原文地址:https://www.cnblogs.com/SpeedZone/p/7223897.html