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.h和memory.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;//先输出,然后返回
}