zoukankan      html  css  js  c++  java
  • 注意点罗列

    1、long long的范围是+-的2^63-1,不是64,而unsigned long long可以到达这个范围。

    2、题目答案看似很多,时间复杂度太高时,想想鸽笼原理,可能很少。

    3、线性逆元方程 能在o(n)的时间内算出1-n所有数字的逆元。

    处理阶乘的逆元

    const int MOD = (int)1e9 + 7;//按题目要求的取余数
    const int N = 1000000 + 5;
     
    int inv[N + 5];
     
    void init_inv(){
        inv[1] = 1;
        for(int i = 2; i < N; i ++)
            inv[i] = (MOD - MOD / i) * 1ll * inv[MOD % i] % MOD;
    }
    jc[i]代表i的阶乘的逆元
    A[0]=1;
        for(int i=1;i<=200000;i++){
            A[i]=A[i-1]*i%mod;
            jc[i]=jc[i-1]*inv[i]%mod;
        }
     

    4、模拟题也有可能爆 long long。

    5、有关gcd的题目,要把两个数字拆成 m1*g,m2*g来找思路。

    6、对于看上去是矩阵快速幂的题目,可以公式之间乱搞一下得到矩阵递推式。

    7、对于非线性的递推式,比如f(n)=f(n-1)+2*f(n-2)+n^4,要把非线性的n^4变成线性的,也就是和(n-1)^4建立对应关系。

    对于这个例子  n^4=((n-1)+1)^4,然后展开。hdu5950

    8、dfs遍历找固定大小的环的时候,如果会出现大量的回头计算(比如要找大小为4的环,然后找到了1-2-1-3-1)。可以考虑从小到大建立单向边。hdu5952

    9、题目给出的取模数如果不是质数,则不能用逆元来求,必须用过c[i][j]=c[i-1][j-1]+c[i-1][j]%mod,来递推.

    10.算逆元,用快速幂计算 ^{a^{b}} 传进去的时候就要对a取模。因为当次数是奇数的时候,会有a=a*a%mod的运算。这里如果a太大,可能a*a直接爆了。

    11、c++有自带的gcd函数,就是__gcd(x,y),而且非常快,但是现场赛没用过,最好用下面这个,(加了inline就和__gcd一样快了)

    inline ll gcd(ll a,ll b) {
    	if(b==0)return a;
    	return gcd(b,a%b);
    }
    

    12、在利用map判断是否存在的时候,用mp.count(),函数,否则可能会在map中这种情况,只是他的value是等于0的,这样在迭代的时候就会出问题。

    13、unordered_map的使用

    和map相比,查找的时间快(内部是哈希表),但是key是无序的,头文件#include<unordered_map>。(c11)

    在c++11以前要使用unordered_map需要

         #include<tr1/unordered_map>  //在unordered_map之前加上tr1库名,
         using namespace std::tr1;      //与此同时需要加上命名空间
     1 #include<cstdio>
     2 #include<unordered_map>
     3 using namespace std;
     4 unordered_map<int, int>mp;
     5 int main() {
     6     mp[1] = 2;
     7     if (!mp.count(2))printf("找不到元素2
    ");
     8     printf("%d
    ", mp[1]);
     9 
    10 }

     14、

    用 ios::sync_with_stdio(false)  可以关同步,提高cin cout的速度,但是还是没有scanf printf快,而且用了关同步后,只能用cin cout或者只能用scanf printf,否则会wa而不是ce。

    15、-1e9是爆int类型的

    16、   x | n  这个符号表达,x能被n整除

    17、当2^b<=k<2^(b+1) 时,1-k所有数能用b+1个数拼出来;(2进制覆盖)

  • 相关阅读:
    IIS中的 Asp.Net Core 和 dotnet watch
    net Core 2.0应用程序发布到IIS
    PHP是.NET上的一门开发语言
    【Vue 入门】使用 Vue2 开发一个展示项目列表的应用
    如何快速处理线上故障
    程序员的“认知失调”
    怎么轻松学习JavaScript
    Android-完全退出当前应用程序的四种方法
    Android java.lang.ClassCastException
    Intent传递对象的两种方法(Serializable,Parcelable)
  • 原文地址:https://www.cnblogs.com/mountaink/p/9536708.html
Copyright © 2011-2022 走看看