• 【游记】2019国庆清北刷题营


    图论

    图论部分转载于Shu_Yu_Mo の blog

    2-SAT

    SomeThing
    • 又名2-SAT-2
    • 判断有无解
    • 确定变量
    • 确定关系表达式
    • 变量的取值有两种
    • %d - SAT 表达式有多少个变量
    • SAT - %d 每个变量的情况个数
    加边规则

    在这里插入图片描述

    如果x>yx>yx>yx−−>yx --> yx−−>y,表示确定x即可确定y
    (当某个点必须为某个值的时候,自身连边,例:当必须为true时,就false连向true)

    例题
    • POJ2446
    • HDU3622
    • UVA1514 Piece it together
    • UVA1086 The Ministers’ Major Mess
    • HDU4306

    二分图

    SomeThing
    • 此图是树 => 此图是二分图

    • 此图是二分图 => 此图是树

    • 二分图两边的点数量为n,m,匹配值是x,最大独立集数量为n+m-x

    例题

    给出一张图,删一条边,使之成为二分图(CF 19E Fairy

    最大团

    SomeThing
    • 给一张图,求最大团 —> NPC
    • 所以很多问题中,求最大团的图有很多特殊性质。
    • 求最大团的方法 (wait)。
    • 补图 —> 把图之前的图上的边全都删掉,没有的边全都加上
    • 原图的反图中的最大独立集就是最大团
    例题
    • 【HEOI2012】朋友圈

    最大独立集

    • 原图的反图就是最大团。
    • 在二分图中,独立集的个数为,n+m−x

    independent

    CSP-Algorithm

    图论

    • Tarjan
    • 二分图
    • 2-SAT
    • 最小生成树
    • 最短路

    模拟

    • 灭鼠计划
    • 猪国杀
    • 立体图
    • 操作系统
    • 靶形数独
    • [THUPC2018]组合数问题

    SomeThing

    动态规划

    DP的三种方法

    1. 记忆化搜索
    2. 用自己算别人
    3. 用别人算自己

    排列类dp

    1. 把数字从小到大or从大到小一个一个插入
    2. 一个序列的前缀也是一个前缀
    3. 在1~k的排列中加入i,可以将大于等于i的数字全部加1,然后再插入i。

    例题

    例题1:求在一颗无限大的满二叉树上取n个点取到第k层的方案数。一个非根节点只有当它的父亲节点被选择是才可以被选。

    思路:把根拆掉变成两颗更小的树。

    ans=f[n][n]f[n][k1]ans = f[n][n] - f[n][k-1]

    例题2:

    在这里插入图片描述

    状态:f[i][j][k]f[i][j][k] 用了j个i-1,i,i+1与k个i,i+1,i+2的方案,枚举l个i+1,i+2,i+3。

    在这里插入图片描述

    题目链接:https://www.luogu.org/problem/CF1110D

    例题3:

    在这里插入图片描述

    一般思路:维护前i轮下来逆序对的和。但是不知道转移时交换的两个数的大小关系。很显然,这样不行。

    提示:期望的和=和的期望 -> 所有方案的逆序对数=枚举两个位置交换,在所有方案中有多少种方案会形成逆序对。

    f[i][j][k]f[i][j][k]表示在i轮之后i,j小于i,k的方案数。 求有多少j>k但i,j小于i,k。

    我们考虑暴力枚举i,j来统计逆序对数,那么=(ij)sum 逆序对数 = sum 方案(sum i *sum j)

    l是用来枚举位置j交换后会对增加/减少多少逆序对。

    在这里插入图片描述

    在这里插入图片描述

    题目来源:

    在这里插入图片描述

    At coder Inversion Sun 030D(大概是这个)

    写题

    流程

    1. 想思路
    2. 翻译成代码
    3. 调试

    调试技巧

    对拍
    • 工具
    1. 你的程序
    2. 暴力程序
    3. 数据生成器
    4. 对拍程序
    • 结果

      • 一样:
      1. 都对了
      2. 错到一块了qwq
      • 不一样:
      1. 至少一个错的
      2. 帮你找到调试用的数据
    • 用处: 帮你找到一组错误的数据

    • 效率:

    在这里插入图片描述

    写错了 -> 一般很快就出问题

    • 对拍程序:

    在这里插入图片描述

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    int main()
    {
        while(true)
    	{
        	system("data.exe");
        	system("std.exe");
        	system("brute.exe");
        	if(system("fc std.out brute.out")) break;
    	}
    }
    
    • 产生1~n的排列

    在这里插入图片描述

    • windows产生rand(rand()自身最大值很小):

    在这里插入图片描述

    • 树的生产方法
    1. 纯随机
      在这里插入图片描述
    2. 扫把图:
      在这里插入图片描述
    • 生成图
      • 直接生产
      • 用map or set把重边去掉
      • 连通图:先生成一颗树,再随机加边
      • DAG:i -> j 当且仅当i < j
    • 强制在线:把暴力写入数据生成器中。可以直接生产离线数据,方便对拍,拍完了把代码改成强制在线。

    数论

    exgcd

    用法:求ax+by=gcd(a,b)ax+by=gcd(a,b)的一组整数解,或者判断ax+by=kax+by=k是否有解

    线性筛

    筛素数核心思想:一个数大于1的倍数一定是合数。

    欧拉筛分:一个数,一定能被质因数分解。

    x=p1k1p2k2......pnknx=p1^k1*p2^k2*......*pn^kn

    x=p1p1k11p2k2......pnknx=p1*p1^{k1-1}*p2^k2*......*pn^kn

    欧拉函数

    phi(i)表示小于等于i的数里面与i互素的数的个数

    phi(x)=x(11/p1)(11/p2)...(11/pn)phi(x)=x(1-1/p1)(1-1/p2)...(1-1/pn)

    求一个数的phi <==> 求这个数的质因数分解

    性质:

    1. phi(1)=1phi(1)=1(唯一和1互质的数就是1本身)
    2. nn是素数,则phi(n)=n1phi(n)=n-1
    3. nn是合数,则phi(n)<n1phi(n)<n-1
    4. nn为奇数时,则phi(2n)=phi(n)phi(2n) = phi(n)
    5. aabb互质,则phi(ab)=phi(a)phi(b)phi(a*b)=phi(a)*phi(b)

    组合数

    在这里插入图片描述

    #### 逆元

    在这里插入图片描述

    欧拉定理&feim

    在这里插入图片描述

    在这里插入图片描述

    Lucas定理

    Lucas(n,m,p)=C(n%p,m%p)Lucas(n/p,m/p,p)Lucas(n,m,p)=C(n\%p,m\%p)*Lucas(n/p,m/p,p)

    中国剩余定理(crt)

    在这里插入图片描述

    在这里插入图片描述

    1. 先将P分解质因数,得到其质因子

    2. 用Lucas定理求C(n,m)=Xi(mod pi)C(n,m)=X_i(mod pi)

    3. 合并两个相邻的同余方程,要求gcd(p1,p2) = 1

      1. C(n,m)=x1(mod p1)

        C(n,m)=x2(mod p2)

      2. C(n,m)=p1*k1+x1=p2*k2+x2 ==> exgcd

        p1*k1 - p2*k2 = x2 - x1

      3. 用exgcd求出一组整数解(k1,k2)

        C(n,m) = p1 * k1 + x1 (mod p1 * p2)

    高斯消元

    【HNOI2013】游走

    在这里插入图片描述

    在这里插入图片描述

    大步小步算法(BSGS)

    给定a,y,p,求最小的非负整数x,使得ax=y(mod p)a^x=y(mod p)

    在这里插入图片描述

    Bzoj2242:[SDOI2011]计算器

    在这里插入图片描述

    例题

    在这里插入图片描述

    在这里插入图片描述

    CSP-S会涉及到的数学相关的知识

    1. 快速幂
    2. 矩阵乘法
    3. GCD/exGCD
    4. 筛素数/素数判断
    5. 欧拉函数
    6. 逆元
    7. 组合数取模/卢卡斯定理
    8. 中国剩余定理
    9. 高斯消元

    模拟

    例题

    • 时间复杂度
    • P3585 [POI2015]PIE
    • P3492 [POI2009]TAB-Arrays

    贪心

    例题

    1. P3419[POI2005]SAM-Toy Cars

      贪心策略:优先替换下一次出现时间晚的玩具,因为下一次出现得越晚,它闲置的时间最长,可以少占用地板的空间。

    2. [CF898D]Alarm Clock

      贪心策略:优先删每一段时间靠后的闹钟

    3. P3545[POI2012]HUR-Warehouse Store

    4. [CF954E] Water Taps

    5. P3457 [POI2007]POW-The Flood

    6. P3566 [POI2014]KLO-Bricks

    考试策略

    1. 开考前把考试前最终需要检查的东西写一下。

    2. 前10~15分钟读题:读懂题,知道题在干什么,知道样例是怎么算的。

    3. 5分钟选择做题顺序,这时候还没有想出来题还没有怎么做,凭直觉把题目安装难度排序。

    4. 约1.5h写完每个题目的暴力,理想暴力分数:T1 100分,T2 60分,T3 30分。

    5. 接下来按照平时做题的方法去写一百分/更多部分分的做法。
      Alarm Clock

      贪心策略:优先删每一段时间靠后的闹钟

    6. P3545[POI2012]HUR-Warehouse Store

    7. [CF954E] Water Taps

    8. P3457 [POI2007]POW-The Flood

    9. P3566 [POI2014]KLO-Bricks

    考试策略

    1. 开考前把考试前最终需要检查的东西写一下。
    2. 前10~15分钟读题:读懂题,知道题在干什么,知道样例是怎么算的。
    3. 5分钟选择做题顺序,这时候还没有想出来题还没有怎么做,凭直觉把题目安装难度排序。
    4. 约1.5h写完每个题目的暴力,理想暴力分数:T1 100分,T2 60分,T3 30分。
    5. 接下来按照平时做题的方法去写一百分/更多部分分的做法。
    6. 最后10到15分钟停止虐键盘,检查文件,编译,调试信息,数组大小,初始化等等。
  • 相关阅读:
    利用Connect By构造数列
    Linux学习4——Vim和Bash
    Linux学习3——磁盘文件管理系统与压缩和打包操作
    Linux学习2——文件与目录
    Linux学习1——首次登录
    Linux系统的简介及Linux系统的安装
    Windows系统的安装
    5月份的技术总结
    计算机网络基本概念
    软件测试基础概念摘要
  • 原文地址:https://www.cnblogs.com/aurorapolaris/p/13449108.html
Copyright © 2020-2023  润新知