• 奇怪的笔记酱


    //摘自洛谷:

    //0x3f3f3f3f还能给我们带来一个意想不到的额外好处:如果我们想要将某个数组清零,我们通常会使用memset(a,0,sizeof(a))这样的代码来实现(方便而高效)

    //但是当我们想将某个数组全部赋值为无穷大时(例如解决图论问题时邻接矩阵的初始化),就不能使用memset函数而得自己写循环了

    (写这些不重要的代码真的很痛苦)

     //我们知道这是因为memset是按字节操作的,它能够对数组清零是因为0的每个字节都是0

     //现在好了,如果我们将无穷大设为0x3f3f3f3f,那么奇迹就发生了,0x3f3f3f3f的每个字节都是0x3f!

    //所以要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))。

    //http://blog.csdn.net/u011394362/article/details/39135107


     浮点数处理

    1.我们一般认为两个浮点数相等,当且当他们之间的误差不超过1e-8。

    2.对于浮点数进行(int)转换时,计算机是只取整数部分的。

    e.g.1.999999999转换为int就是1,所以

    浮点数向int转换,会丢失精度。

    为了避免这个,建议如果想取到整数部分。
    可以使用
    float b;
    int a;
    a=(b+0.5);
    这样写的话,就是四舍五入。
    如果写成a=b
    可能有0.99999999999被截断,a就是0的情况。


    字符串处理

    1.string的find函数

    如果说要find的字串不在str里面,该函数会返回string::npos,即-1。str.find("...."); 的返回值,不明白,应该也是一样。str.find("asdf"); 的返回值应该是0,即在str中的index位置。 found=str.find(str2);//found是str2在str中第一次出现的位置,找不到返回string::npos,即-1。
    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #define maxn 105
    using namespace std;
    string a,b;
    int main()
    {
        cin>>a>>b;
        cout<<a.find(b)+1;
        puts("");
        return 0;
    }
    e.g.

     2.char的strstr()

    strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。

    #include<iostream>
    
    #include<cstring>
    
    using namespace std;
    
    int main()
    
    {
    
        char a[100],b[100];
    
        cin>>a>>b;
    
        cout<<strstr(a,b)-a+1<<endl;
    
        return 0;
    
    }
    e.g.

    3.字符串拆分至二维数组

    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #define maxn 1005
    using namespace std;
    char s[maxn],a[105][105];
    int main()
    {
        gets(s);
        int n=strlen(s);
        int k=0,j=0;
        for(int i=0;i<n;++i)
        {
            if(s[i]==' ') 
            {
                   k++;
                   a[k][j]='';
                j=0;
                   continue;
            }
               a[k][j]=s[i];
               j++;
        }
        for(int i=k;i>=0;--i)cout<<a[i]<<" ";
        puts("");
        return 0;
    }
    e.g.

     数论

    对于整数p q,有p*q==gcd(p,q)*lcm(p,q) 
    设s=lcm(p,q)/gcd(p,q)==y0/x0; 
    则s=p*q/gcd(p,q)^2 
    因为p/gcd(p,q)与q/gcd(p,q)互质,所以问题转化成了找一组x,y,使得x*y==s(x*y==y0/x0)且gcd(x,y)==1

  • 相关阅读:
    [PA2014]Muzeum
    [AMPPZ2014]Jaskinia
    [PA2015]Rozstaw szyn
    LOJ 6713 「EC Final 2019」狄利克雷 k 次根 加强版
    Problem. R
    51nod 2583 数论只会Gcd
    51nod 1847 奇怪的数学题
    51nod 1575 Gcd and Lcm
    Problem. Q
    CF868G El Toll Caves
  • 原文地址:https://www.cnblogs.com/gc812/p/6012659.html
Copyright © 2020-2023  润新知