稍微和骗分导论分开一下,这里主要是搜集算法竞赛一些常用的代码模板和使用小技巧之类的,欢迎收藏~
长期更新哦!
常用的宏定义
#include "bits/stdc++.h"
#define THREE_MAX(a, b, c) (a > b ? (a > c ? a : c) : (b > c ? b : c))
#define THREE_MIN(a, b, c) (a > b ? (b > c ? c : b) : (a > c ? c : a))
#define DEBUG freopen("in.txt","r+",stdin);
#define MAKE freopen("out.txt","w+",stdout);
#define FOREACH(a,b) for(int a = 0;a < b;a++)
#define INIT(a,b) memset(a,b,sizeof(a));
#define ULL unsigned long long
#define LL long long
#define endl '\n'
using namespace std;
int main()
{
// DEBUG
// MAKE
return 0;
}
稍微解释一些宏定义的作用
DEBUG,可以很方便的调试输入样例,重新定向输入流到文件(再也不需要从文本框粘贴啦)。
MAKE,打表用。
FOREACH可以节约打for的时间,还更加简洁,当然这个得看个人习惯,也做不到Qt的Foreach智能
线性素数筛
bool is_prime[1000001] = {};
void produce()
{
memset(&is_prime, 1, sizeof(is_prime));
is_prime[0] = is_prime[1] = 0;
for (unsigned long long i = 2; i <= 1000000; i++)
{
if (i * i <= 1000000)
for (unsigned long long j = i * i; j <= 1000000; j += i)
is_prime[j] = 0;
}
}
素数打表(遇到就可以直接cv了wwwww,1000001个)
素数打表文件
利用小费马定理的玄学素数筛(因为太玄学又不大用得到就删去了,知道有这个东西就行)
关闭C++的cout cin刷新与绑定,加快读取读入速度
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);