钓起来的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的个数
原文地址:https://www.cnblogs.com/phemiku/p/10946479.html