知识点总结

KMP 与 Sunday的比较

Gate

总结:一般来说使用KMP能保证不出错

快读入门

https://www.wjyyy.top/3514.html

大佬们的神仙宏定义

#pragma warning(disable : 4996)
#include"bits/stdc++.h"
using namespace std;
 
#define ll long long
#define fo(i,n) for(ll i=0; i<(n); i++)
#define FO(i,a,b) for(auto i=a; i!=(b); i+=(b)>(a)?1:-1)
#define vll vector
#define vch vector
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define sll set
#define all(c) c.begin(), c.end()
#define on(x) cout<>n;
    while(n)
    {
        r=n%10;
        n/=10;
        if(r==7)
        {
            flag=1;
            break;
        }
    }
    if(flag) on("Yes")
    else on("No")
    return 0;
}

对比文件输入在OI中的应用

#ifndef ONLINE_JUDGE
#pragma warning(disalbe : 4996)
#endif
#include

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
#ifndef ONLINE_JUDGE
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
#endif // !ONLINE_JUDGE
	
#ifndef ONLINE_JUDGE
	fclose(stdin);
	fclose(stdout);
	system("out.txt");
#endif // !ONLINE_JUDGE
	return 0;
}

//////////////////下面的方法明显好很多,输出利用“黑框”即可////////////////////

#include
using namespace std;
int main(){
    freopen("in.txt","r",stdin);//注意点,在提交的时候要手动注释掉,不然会WA
    return 0;
}

memset初始化问题

memset可以对高位数组进行初始化,非常方便。需要注意的是memset的头文件是string.hmemory.h

(注:一下dp高维数组都是全局变量,局部变量请自行修改sizeof语句)

一:赋 ‘0’ 与 赋 ‘-1’

memset(dp,0,sizeof(dp));

memset(dp,-1,sizeof(dp));

在计算机中,数据用补码保存。-1的补码(32位)是0xFFFFFFFF,(8位,一个字节)是0xFF,memset是按字节填充的,所以不影响赋值的真实性。

二:赋最大值

memset(dp,127,sizeof(dp));

127用8位二进制数表示是0b01111111:用4个0b01111111填充到一个32位的int中:
    得到了一个接近32位无穷大(INT_MAX = 0x7FFFFFFF = 2147483647)的数。

三:赋最小值

memset(dp,-127,sizeof(dp)); 

-127用补码表示是 0b10000001 ,用4个 0b10000001 填充到int中:
   	得到了一个绝对值非常大的一个负数(-2122219135)

初始化优化

在初始化Floyd或者其他类似的东西

for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
        gra[i][j]=inf
for(int i=1;i<=b;i++)
    gra[i][i]=0

是比

for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
        if(i==j)    gra[i][j]=0;
        else       gra[i][j]=inf
    }    

快的(测试大约1是2的80%的时间)

原因后者每次都要判断

返回值技巧

#include
signed main() {
    std::string s, t;
    std::cin >> s;
    while (std::cin >> t) {
        if (s[0] == t[0] || s[1] == t[1])return std::cout << "YES", 0;
    }
    return std::cout << "NO", 0;//先输出,然后返回
}

你可能感兴趣的:(知识点总结)