蓝桥杯——要背的结论板子

Posted 中二病没有蛀牙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯——要背的结论板子相关的知识,希望对你有一定的参考价值。

二分查找

区间为[l, mid]和[mid + 1, r]

int bsearch_1(int l, int r)

    while (l < r)
    
        int mid = l + r >> 1;
        if (check(mid)) r = mid;
        else l = mid + 1;
    
    return l;

区间为[l, mid - 1]和[mid , r]

int bsearch_2(int l, int r)

    while (l < r)
    
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    
    return l;

数学

常用结论

因式分解定理

N = p 1 a 1 ∗ p 2 a 2 ∗ ⋅ ⋅ ⋅ ∗ p n a n N=p_1^a_1 * p_2^a_2*···*p_n^a_n N=p1a1p2a2pnan(其中一系列 a n a_n an为指数, p n p_n pn为质数)

代码

int cnt = 0;
    for(int i = 2 ;i <= sqrt(m); i++) 
        if( n % i == 0) 
            ans.push_back(i, 0);
            while(n % i ==0)  
                n /= i;
                ans[cnt].second++;
            
            cnt++;
        
    
    if(n != 1) 
        ans.push_back(n,1);
        cnt++;
    

N的约数个数

约数个数 ( a 1 + 1 ) ( a 2 + 1 ) … … ( a n + 1 ) (a_1+1)(a_2+1)……(a_n +1) a1+1a2+1an+1

N的约数之和

约数之和 ( 1 + p 1 1 ∗ + p 1 2 + ⋅ ⋅ ⋅ + p 1 a 1 ) ∗ ⋅ ⋅ ⋅ ∗ ( 1 + p k 1 ∗ + p k 2 + ⋅ ⋅ ⋅ + p k a k ) (1+p_1^1 *+p_1^2+···+p_1^a_1)*···*(1+p_k^1 *+p_k^2+···+p_k^a_k) (1+p11+p12++p1a1)(1+pk1+pk2++pkak)

快速幂

ll ksm(ll a,ll b,ll m)
    ll res = 1;
    while(b)
        if(b & 1)
            res = res * a % m;
        a = a * a % mod;
        b >>= 1;
    
    return res;

排列组合

组合公式: C n m = n ! m ! ( n − m ) ! C_n^m = \\fracn!m!(n - m)! Cnm=m!(nm)!n!

基本性质:

线性筛

int primes[N], cnt;
bool st[N];

void get_primes(int n)

    for (int i = 2; i <= n; i ++ )
    
        if (!st[i]) primes[cnt ++ ] = i;
        for (int j = 0; primes[j] <= n / i; j ++ )
        
            st[primes[j] * i] = true;
            if (i % primes[j] == 0) break;
        
    

搜索

bfs

int dir[4][2] = 0,1,0,-1,1,0,-1,0;
int dx[4] = -1, 0, 1, 0, dy[4] = 0, 1, 0, -1;

struct node
    int x,y,l;
;

node s,e;
int bfs(int x,int y)

    memset(vis,-1,sizeof(vis));
    queue<node> q;
    q.push(s);
    vis[s.x][s.y] = 0;
    while(!q.empty())
        node now = q.front();
        q.pop();
        for(int i = 0; i < 4;i++)
            int nx = now.x + dx[i];
            int ny = now.y + dy[i];
            if (nx < 0 || nx >= r || ny < 0 || ny >= c) continue;  // 出界
            if (g[nx][ny] == '#') continue;  // 障碍物
            if (vis[nx][ny] != -1) continue;  // 之前已经遍历过
            node next = nx,ny,now.l+1;
            vis[nx][ny] = vis[now.x][now.y]+1;
            q.push(next);
            
        
    
    return vis[e.x][e.y];

树状数组

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100010;
int s[maxn],tr[maxn];
int n,m,a,b,k;

int  lowbit(int x)
    return x & -x;


void add(int x,int v)

    for(int i = x; i <= n;i += lowbit(i))
        tr[i] +=v ;

int querry(int x)
    int  res = 0;
    for(int i = x;i ;i -= lowbit(i))
        res += tr[i];
    return res;

线段树

int s[maxn];
int n,m;

struct  node

    int l,r;
    int sum;
    /* data */
tr[maxn*4];


void pushup(int u)
    tr[u].sum = tr[u<<1].sum + tr[u << 1 | 1].sum;


void build(int u,int l,int r)
    if(l == r) tr[u] = l,r,s[r];
    else
        tr[u] = l,r;
        int mid = l +r >>1;
        build(u<<1,l,mid),build(u<<1|1,mid+1,r);
        pushup(u);
    



void modify(int u,int x,int v)

    if(tr[u].l == tr[u].r) tr[u].sum += v;
    else
        int mid= tr[u].l + tr[u].r >> 1;
        if(x <= mid) modify(u<<1,x,v);
        if(x > mid) modify(u<<1|1,x,v);
        pushup(u);
    


int querry(int u,int l,int r)
    if(tr[u].l >= l && tr[u].r <= r) return tr[u].sum;
    int mid = tr[u].l + tr[u].r >>1;
    int sum = 0;
    if(l <= mid) sum += querry(u<<1,l,r);
    if(r > mid) sum += querry(u<<1 |1,l,r);
    return sum;

动态规划

以上是关于蓝桥杯——要背的结论板子的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯实例之开发板特点

蓝桥杯板子红外线使用,NEC协议

蓝桥杯板子 超声波模块使用

Jquery基本教程(背还是要背的)

2022蓝桥杯省赛——数位排序

蓝桥杯单片机组流程是啥,​请说具体点