zoukankan      html  css  js  c++  java
  • 钓起来的tips系列

    ●求n的阶乘:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n;
     4 int jc(int k)
     5 {
     6     if(k==1)return 1;
     7     else return jc(k-1)*k;
     8  } 
     9
    10 /*int jc(int k)
    11 {   //我自己不太喜欢的一种写法_(:3z)__
    12     int x;
    13     if(k==1)x=1;
    14     else  x=k*jc(k-1);
    15     return x;
    16  }*/ 
    17 
    18 int main()
    19 {
    20   cin>>n;
    21   cout<<jc(n);
    22   return 0;
    23 }

     ●~scanf的作用

    位运算以达到控制循环的作用

    https://blog.csdn.net/wtyvhreal/article/details/42006055(写得很好的一篇qwq)

    ●数学香瓜

    • 要计算只包含加法、减法和乘法的整数表达式除以正整数n的余数,可以在 每步计算之后对n取余,结果不变。

    ●乱七八糟

    • scanf只能一个一个读单词,不读空格
    • sort形式:sort(first_pointer,first_pointer+n,cmp //没有cmp比较函数就默认升序排列
    • while(scanf("%s",&st)==1)输入神用
    • cin/cout之所以慢,是因为它多了和STDIO同步的过程,因此我们只需要把这个同步关系禁用就可以了,为了禁用这个同步关系,我们需要在main()函数开头加上以下代码:

      ios::sync_with_stdio(false);

      如此一来,同步关系就被禁用了,当然副作用是无法再使用scanf/printf。

    • 【判断素数改进版】

    int
    is_prime(int x) { if(x<=0)return 0; int m=floor(sart(x)+0.5); for(int i=2;i<x;i++) if(x%i==0)return 0; return 1; }

     ●前綴和

    • 听老师讲搜索和dp时总听到前缀和blabla,一直搞不懂,当然要查查啦!
    • 引自K_rew的博客https://blog.csdn.net/K_rew/article/details/50527287

      一维前缀和
      这个优化主要是用来在O(1)时间内求出一个序列a中,a[i]+a[i+1]+……+a[j]的和。

      具体原理十分简单:用sum[i]表示(a[1]+a[2]+……+a[i]),其中sum[0]=0,则(a[i]+a[i+1]+……+a[j])即等于sum[j]-sum[i-1]。

      二维前缀和
      同理,有一维就有二维。对于一个矩阵a,我们也能在O(1)时间内求出子矩阵[x1~x2][y1~y2]的和。

      设sum[i][j]为子矩阵[1~i][1~j]的和。则由容斥原理得:

      sum[0][j]=sum[i][0]=0

      a[x1~x2][y1~y2]=sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1]

    •  c++输入输出流

           sprintf妙啊!

    • 代码来源:https://blog.csdn.net/jllongbell/article/details/79092891

      int main(){
          char str[256] = { 0 };
          int data = 1024;
          //将data转换为字符串
          sprintf(str,"%d",data);
          //获取data的十六进制
          sprintf(str,"0x%X",data);
          //获取data的八进制
          sprintf(str,"0%o",data);
          const char *s1 = "Hello";
          const char *s2 = "World";
          //连接字符串s1和s2
          sprintf(str,"%s %s",s1,s2);
          cout<<str<<endl; 
          return 0;
      } 
      

      2.但是!更妙的是这个stringstream啊!

         stringstream被群里dalao嘲讽了…_(:3/_)__我不管我就觉得他好用哼

                https://blog.csdn.net/qq_28114615/article/details/85778797

           (lrj大佬:可以把string作为流进行读写,定义在sstream头文件中。 虽然string和sstream都很方便,但string很慢,sstream更慢,应谨慎使用)

    •  cin>>t有时候比while啥玩意快的,详细可以看机器翻译那道题的提交记录……
    • #define For(i,l,r) for (register int i=l; i<=r; i++)   压行快乐
    • int本来就是signed int,int = signed int = signed 有时候直接 #define int long long 了,就要把int main改成signed main
    • __builtin_popcount计算二进制某数中1的个数
  • 相关阅读:
    二分匹配
    第k短路
    2015_10
    The 15th Zhejiang University Programming Contest
    2015_8
    hdu 1565
    istringstream 用法
    floyd 闭包传递 判断两个点是否属于同一个 强连通分量
    Sicily 1866.Gene Reprogram 一种经典的hash方法
    zoj 3130 最小费用最大流 (求 s到e 的两条总花费最少的 完全没有交点的 路径)
  • 原文地址:https://www.cnblogs.com/phemiku/p/10946479.html
Copyright © 2011-2022 走看看