A题时遇到的一些技巧

  这篇主要是讲刷题时候遇到的一些技巧,该篇保持持续更新状态。。

  1、求数组的长度:int a[]={,,,};  int n = sizeof(a)/sizeof(a[0])

  2、求想上取整,例如7/3 = 4;  int res = a/b + !!(a%b);

  3、求数组全排序,先对数组进行从小到大排序,然后do{ 对a数组进行操作}while(next_permutation(a,a+n));

  4、背包问题时,求1到V之间的种数,由于用hash法再开一个数组,当数组过大时,内存会挂。因此用如下方法可以节约内存:(相关题目hdu2844)

    (1)方法一:当费用与价值相等的时候。

    int cnt = 0;

    for(int v=1;v<=V;++v)
      if(v==dp[v])
        ++cnt;

    (2)方法二:使用刚好装满的思想去做,最后判断大于0的个数。

  5、字符串初始化最好都为'',这样在使用的时候就不会出现由于末尾没加'',而出现乱码的情况了。

    char str1[50]={''},str2[50]="abcde";

    for(int i=0;i<strlen(str1);++i)

       str2[i] = str1[i];

    //str2[strlen(str1))='';    这句就不用加了。

   6、使用Map<类型,int>时,如果判断是否添加过时有两种方法:

  举例: Map<string,int> msi;

     1、 pair<Map<string,int>:iterator,bool> pmb = msi.insert("张三",100);

       判断pmb.second的值是否为true

    2、直接判断msi[“张三”]的值是否为0(前提是你上一次赋值确保不是0)

   7、在全局类的变量要大写,不然在提交代码后会出现编译不过的现象。例如:next,index这些变量,需要改成Next,Index。

   8、二维数组置零不要int dj[10][10] = {0};没用!需要memset函数或者循环,不然只是第一行。

原文地址:https://www.cnblogs.com/jlyg/p/6742100.html