稍微和骗分导论分开一下,这里主要是搜集算法竞赛一些常用的代码模板和使用小技巧之类的,欢迎收藏~

长期更新哦!

常用的宏定义

#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);