• 记录零碎ACM小知识


    1. 整型数组元素数量不能超过1 * 107,超过了编译不会检查出错误,但是运行会崩溃。。。
    2. 取余运算符只能用在两个int型之间。
    3. #include <cmath> float  fmod (float x, float y)            功能计算x / y的余数。可以在%用不了的情况下尝试下
    4. 两个数的位数分别为a, b, 则两个数相乘后的数位为a + b - 1。
    5. 一个包含所有c++的头文件:#include <bits/stdc++.h>。但不推荐使用,因为会浪费时间
    6. map<a, b> mp中是依靠关键字有小到大排序的,即依靠a。
    7. 有时候你可能会看到有些程序不使用方便的"using namespace std;"命令语句。为什么不直接使用"using namespace std;"比较简便?因为这样对于比较大的程序来
      说不是很好的习惯,因为使用这句话虽然简便了,但是这样导致把std命名空间的所有标准库函数都引进到程序文件里,这样如
      果以后程序涉及到同名函数名或变量名,将会出现难以调试的错误。

    8. 非全局数组,即定义在函数内部的数组(如main函数)需要手动进行初始化。而全局数组系统会自动初始化,一般会默认初始化为0。如int数组将每个变量初始化为0, 全局布尔数组将每个元素默认初始化为0。(参考处:https://blog.csdn.net/zzlu_88888/article/details/83303656
    9. 判断是否为素数的函数
      1 bool isPrime(int x) {
      2     if (x <= 1) return false;
      3     if (x == 2) return true;
      4     if (x % 2 == 0) return false;
      5     for (int i = 3; i * i < x; i += 2) {
      6         if (x % i == 0) return false;
      7     }
      8     return true;
      9 }
    10. 设s是一个字母,那么语句"s ^= 32;" 便可以把当前字母从小写变成大写又或者把大写变成小写。计算机异或运算如:0 ^ 0 = 0; 0 ^ 1 = 1; 1 ^ 0 =  1; 1 ^ 1 = 0;eg:'A' 是65,二进制码:‭01000001‬,‘a’是97,二进制码:‭01100001‬。所以‘a’ - ‘A’ == 32,32 == 25,异或运算符会把s的从右到左的第5位二进制数与32的第5位二进制数即1 进行异或运算, 若s == ‘A’ 则第5位二进制数为 0, 异或运算后结果变为1,相当于加了32。若s == ‘a’则第5位二进制数为1,异或运算后结果变为0, 相当于减了32。
    11. 深搜模板
       1 int search(int t)
       2 {
       3     if(满足输出条件)
       4     {
       5         输出解;
       6     }
       7     else
       8     {
       9         for(int i=1;i<=尝试方法数;i++)
      10             if(满足进一步搜索条件)
      11             {
      12                 为进一步搜索所需要的状态打上标记;
      13                 search(t+1);
      14                 恢复到打标记前的状态;//也就是说的{回溯一步}状态恢复,回溯算法的话,一定要注意恢复现场,要保证每一次递归下去的时候我们的状态都是正确的
      15             }
      16     }
      17 }
    12. 个数是指数级别的,凡是指数级别的问题呢,要枚举出所有方案的话,就得要用递归+回溯的方式来做
    13. 想要debug递归函数的话,需要在递归函数语句里面设置断点
    14. 以上为《算法竞赛宝典 语言及算法入门》P89内容。
    15. random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。但在C语言中int random(num)可以这样使用,它返回的是0至num-1的一个随机数。

       可改用C++下的rand函数来实现。

      rand()%n   范围  0~n-1

      rand()主要是实现 产生随机数,其他我们在这里可以无视他

      显然任意 一个数  rand()%n  范围显然是  0~n-1;

      那么 如何产生 n~m的数呢? 一样的   我们只要对rand()进行一些 符号操作就行了;

      n+rand()%(m-n+1);    这样就可以了

    16. 排列与组合的异同
      一、是否按次序排列
      
      1、排列:从n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重复排列。 
      
      2、组合:从n个不同的元素中,取r个不重复的元素,组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组和。
      
      二、符号表示不同
      
      1、排列A(n,r)
      
      2、组合C(n,r)
    17. 异或运算符
       位运算符家族中,最常用的,莫过于异或运算符。
      
      异或运算符是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=01^0=10^1=11^1=0
      
      例如:10100001^00010001=10110000
      
      0^0=0,0^1=1    可理解为: 0异或任何数,其结果=任何数
      
      1^0=1,1^1=0    可理解为:1异或任何数,其结果=任何数取反
             
      
      任何数异或自己,等于把自己置0
      
      1)按位异或可以用来使某些特定的位翻转,如对数10100001的第1位和第2位翻转,可以将数与00000110进行按位异或运算。
        10100001^00000110=10100111 
      
           用十六进制表示: 0xA1 ^ 0x06 = 0xA7
      
      (2)通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a,b的值,可通过下列语句实现:
      
         a=10100001,   b=00000110
      
          a=a^b;   // a=10100111
      
          b=b^a;   // b=10100001
      
          a=a^b;   // a=00000110
      
      (3)异或运算符的特点是:数a两次异或同一个数b(a=a^b^b)仍然为原值a。(实现两个值的交换正是用到了这点)
      ————————————————
      原文链接:https://blog.csdn.net/duji_160/article/details/76533334
    18. 将g数组完全赋值到backup数组,即给a数组做一个备份:memcpy(backup, g, sizeof g);
    19. 输出换行格式的简写:puts("");
    20. 一维动态规划时间复杂度一般有O(n)和O(n^2)两种,时间复杂度取决于状态转移方程。
    21. sort排序pair类时,会先以第一个关键字排序,第一个关键字相同时,再以第二个关键字排序。
  • 相关阅读:
    C++中的类模板详细讲述
    函数模板和模板函数
    vs2008 快捷键大全
    #宏定义##
    多工程项目设置
    conemu 配置
    itcast-svn
    itcast-spring-三大框架整合
    Spring通知方法错误
    动态代理
  • 原文地址:https://www.cnblogs.com/theSunAndSnow/p/11754652.html
Copyright © 2020-2023  润新知