|
3 years ago | |
---|---|---|
.vscode | 3 years ago | |
前缀和 | 3 years ago | |
神奇的操作 | 3 years ago | |
筛法 | 3 years ago | |
高精度 | 3 years ago | |
.gitignore | 4 years ago | |
LICENSE | 4 years ago | |
README.md | 3 years ago | |
tempCodeRunnerFile.cpp | 3 years ago | |
tempCodeRunnerFile.exe | 3 years ago | |
test.cpp | 3 years ago | |
test.exe | 3 years ago |
README.md
CSP
git status git add . git commit -m "" git push -u origin master
# include <bits/stdc++.h>
高精度
- python打表
- 高精加和高精乘
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;
}
}
筛法
- 打表
- 素数筛
- 埃氏筛
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
}
}
}
- 线性筛
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;
}
}
}
矩阵旋转
- 找规律
重定向
freopen(file,"r",stdin);
freopen(file,"w",stdout);
随机数的产生
- 初始化随机数种子
srand(time(NULL))
- rand()
STL初步
- 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);
- 不定长数组 vector
#include <bits/stdc++.h>
vector<int> a;
a.size()
a.resize()
a.push_back()
a.pop_back()
a.clear()
- 集合 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中
- 映射 map 类似python中的字典
map<string,int> dict;
dict['r']=1;//这里dict使用的是string的方法,而dict[]使用的是int的方法
- 栈(后进先出),队列(先进先出)
stack<int> s;
s.top();
s.push(1);
s.pop();
s.empty();
queue<int> x;
x.front();
x.pop();
x.push(1);
x.empty();
- 优先级队列
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();
注意点
- vector作为参数或返回值时,尽量使用传引用,会改变传入的参数。或者直接全局变量,传都不要传。
- 结构体静态变量: static 变量名