• NOIP复习(总结套路)


    开始复习,把u盘现存和noip历年题速刷,写题解,总结套路。以下总结考试经验,解题套路,思维套路

    1. 矩阵乘法,高精度等之类的结构体重载运算符的变量要用const type &x
       inline matrix operator * (const matrix &x,const matrix &y) {
    	matrix c;
    	c.n = x.n;
    	c.m = y.m;
    	
    	rep(k, 1, x.m)
    	rep(i, 1, c.n)
    	rep(j, 1, c.m)
    	c.a[i][j] = (c.a[i][j] + 1ll *  x.a[i][k] * y.a[k][j] % mod) % mod;
    	return c;
    }
    

    c是定义在函数里面的矩阵,有个数组,记得初始化!
    循环KIJ更快,访问连续内存
    3. 01字典树取出x的第j位要这样写 (x>>i)&1 ,不能写成((x&(1<<i))>>i),会爆int
    4.一定要多多面向部分分编程
    5.像map,set这种不支持随机访问的不要用lower_bound(s.begin(),s.end(),x),这样是暴力的。。 要用 s.lower_bound(x);
    6.int向上取整要这样写

    if (temp%k == 0)
        result = temp / k ;
    else
        result = (temp / k)+1;
    

    7.不开longlong见祖宗
    8.

    for(int i = head[u]; i; i = nxt[i]) {
        if(to[i] == fa)continue;
        dfs(to[i], u);
        sz[u] += sz[to[i]];
        for(int j = sz[u]; j >= 0; j--) {
            for(int k = 1; k <= min(j, sz[to[i]]); k++) {
                dp[u][j] = max(dp[u][j], dp[u][j - k] + dp[to[i]][k]);
            }
        }
    }
    

    这样计算会大量重复计算,遇到链会卡成三方,下面那种保证点对都在LCA处计算,保证时间复杂度为而二方

    for(int i = head[u]; i; i = nxt[i]) {
        if(to[i] == fa)continue;
        dfs(to[i], u);
        for(int j = sz[u]; j >= 0; j--) {
            for(int k = 1; k <= sz[to[i]]; k++) {
                dp[u][j + k] = max(dp[u][j + k], dp[u][j] + dp[to[i]][k]);
            }
        }
        sz[u] += sz[to[i]];
    }
    

    9.板子一定要熟,特别是数据结构,不能打错,慢慢打。tarjan的板子(dfn,low,各种要求的(割点割边等)的判定方法)!
    10.函数前面一定要有定义类型,非void函数一定要有返回值,等于号不要打成赋值号
    11.注意看警告!
    12.如果题目有个操作,让你对个数字进行操作,次数很大,上1e9的,多半是倍增,矩阵快速幂
    13.边权都是1/0的可以用双端队列bfs O(n)求最短路,1的放后面。0的放前面

    本文来自博客园,作者:{2519},转载请注明原文链接:https://www.cnblogs.com/QQ2519/p/15374023.html

  • 相关阅读:
    Xcode常用
    iOS知识点
    iOS Crash上传
    [crash详解与防护] KVO crash
    iOS常见bug
    PHP实现万年历
    在Vue框架中引入Element
    PHP--随机生成颜色
    PHP读取Excel表格数据
    权限管理功能(一)
  • 原文地址:https://www.cnblogs.com/QQ2519/p/15374023.html
Copyright © 2020-2023  润新知