Go to file
徐涛 49c9b9c679 2 3 years ago
.vscode 2 3 years ago
前缀和 second 3 years ago
神奇的操作 2 3 years ago
筛法 second 3 years ago
高精度 2 3 years ago
.gitignore Initial commit 4 years ago
LICENSE Initial commit 4 years ago
README.md 2 3 years ago
tempCodeRunnerFile.cpp 2 3 years ago
tempCodeRunnerFile.exe 2 3 years ago
test.cpp 2 3 years ago
test.exe 2 3 years ago

README.md

CSP

git status git add . git commit -m "" git push -u origin master


# include <bits/stdc++.h>

高精度

  1. python打表
  2. 高精加和高精乘
void pplus(int *a, int *c)
{
    int jw = 0;
    for (int i = 0; i < 1000; i++)
    {
        c[i] += a[i] + jw;
        jw = c[i] / 10;
        c[i] %= 10;
    }
}
void pmultiply(int *a, int c)
{
    int jw = 0;
    for (int i = 0; i < 1000; i++)
    {
        a[i] = a[i] * c + jw;
        jw = a[i] / 10;
        a[i] %= 10;
    }
}

筛法

  1. 打表
  2. 素数筛
    1. 埃氏筛
bool book[100000001];
int prim[2000];
int prn = 0;
// 用埃氏筛法生成质数表
void prime(int b)
{
    //初始化,默认全部都是质数
    memset(book, true, sizeof(book));
    book[1] = false; //1不是质数
    int n = sqrt(b); //大于n的合数都被筛了但是prim里面的素数会变少看情况用
    for (int i = 2; i <= n; i++)
    {
        if (book[i])
        {
            prim[prn++] = i;
            //质数的倍数绝对不是质数把所有质数的倍数全部设为false
            for (int j = i; j <= b ; j+=i)
                book[j] = false; // i*j<=b
        }
    }
}
  1. 线性筛
bool book[100000001];
int prim[2000];
int prn = 0;
// 用埃氏筛法生成质数表
void prime(int b)
{
    //初始化,默认全部都是质数
    memset(book, true, sizeof(book));
    book[1] = false; //1不是质数
    for (int i = 2; i <= n; i++)
    {
        if (book[i])
        {
            prim[prn++] = i;
        }
        for (int j = 0; j < prn && i * prim[j] < N; j++)
        {
            book[i * prim[j]] = false; // i*j<=b
            if (i % prim[j] == 0)
                break;
        }
    }
}

矩阵旋转

  1. 找规律

重定向

freopen(file,"r",stdin);
freopen(file,"w",stdout);

随机数的产生

  1. 初始化随机数种子 srand(time(NULL))
  2. rand()

STL初步

  1. sort(开始,结束,比较函数)
struct Node
{
    int a, b;
};
Node a[100];
bool cmp(Node a, Node b)
{
    if (a.a != b.a)
        return a.a > b.a;
    return a.b > b.b;
}
sort(a, a + 100, cmp);
  1. 不定长数组 vector
#include <bits/stdc++.h>
vector<int> a;
a.size()
a.resize()
a.push_back()
a.pop_back()
a.clear()
  1. 集合 set
#define ALL(x) x.begin(), x.end()
#define INS(x) inserter(x, x.begin())

set<int> a, b;
typedef set<int>::iterator SI;
a.insert(1);
a.count(1);
for (SI i = a.begin(); i != a.end(); i++)
    ;                                     //遍历
set_union(ALL(a), ALL(b), INS(a));        //并集放入a中
set_intersection(ALL(a), ALL(b), INS(a)); //交集放入a中

  1. 映射 map 类似python中的字典
map<string,int> dict;
dict['r']=1;//这里dict使用的是string的方法而dict[]使用的是int的方法
  1. 栈(后进先出),队列(先进先出)
stack<int> s;
s.top();
s.push(1);
s.pop();
s.empty();
queue<int> x;
x.front();
x.pop();
x.push(1);
x.empty();
  1. 优先级队列
struct cmp
{
    bool operator()(const int a, const int b)
    {
        return a > b;
        //当a>b时返回ture也就是说越大优先级越小
        //出队列时先弹出小的小的在队列top
    }
};
priority_queue<int, vector<int>, cmp> a;
a.push(1);
a.pop();
a.top();
a.size();
a.empty();

注意点

  1. vector作为参数或返回值时尽量使用传引用会改变传入的参数。或者直接全局变量传都不要传。
  2. 结构体静态变量: static 变量名