当年中二,零碎模板

0x01gmath

/*
* 占坑待填 20171004
* Bigint高精度
* 数据结构模板
* 图论算法模板
* 数学完善
*///头文件模板
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<iomanip>
#include<sstream>
#include<cmath>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<list>using namespace std;//预处理定义
typedef long long LL;
typedef long double LD;#define fst first
#define sec second
#define mp make_pair
const int N = 1e5, inf = 1e9;  //代替define的写法 & e计数法的使用int readint(){  //readint好简单啊为什么。。。int x=0, op=1;  char ch = getchar();  //一定要赋初始值while(ch < '0' || ch > '9'){ if(ch=='-')op=-1; ch = getchar(); }while(ch >= '0' && ch <= '9'){ x=x*10+ch-'0'; ch = getchar(); }return x*op;
}//gmath数学库
//用的时候记得加typedef long long LL;
//int pri[N];
//decom: vector<int>;//素数
int pri[N];
void get_prime(int n){ //诶氏筛法pri[1] = 1;for(int i = 2; i*i <= n; i++)if(!pri[i])for(int j = 2*i; j <= n; j+=i)pri[j] = 1;
}//数论
LL gcd(LL a, LL b){ return b==0 ? a : gcd(b,a%b); }
LL lcm(LL a, LL b){ return a/gcd(a,b)*b; }
LL exgcd(LL a, LL b, LL &x, LL &y){if(!b){x = 1, y = 0;return a;}LL r = exgcd(b, a%b, x, y);LL t = x;x = y;y = t-a/b*y;return r;
}
/*
vector<int> Decom(int n){ //haveBUGint i;vector<int>res;res.push_back(1);for(int i = 2; i <= n; i++){if(n == 1)break;while(n%i == 0){res.push_back(i);n /= i;}}if(n)res.push_back(n);return res;
}
*///快速幂,快速乘
LL mul(LL a, LL b, LL p){LL x = 0;while(b){if(b&1)x=(x+a)%p;a = (a<<1)%p;b >>= 1;}return x;
}
LL mul(LL a, LL b){LL x = 0;while(b){if(b&1)x += a;a <<= 1;b >>= 1;}return x;
}
LL pow(LL a, LL b, LL p){LL x = 1;while(b){if(b&1)x = mul(x,a,p)%p;a = mul(a,a,p)%p;b >>= 1;}return x%p;
}
LL pow(LL a, LL b){LL x = 1;while(b){if(b&1)x = mul(x,a);a = mul(a,a);b >>= 1;}return x;
}//计算几何学
struct Point{ double x, y; }; //点
typedef Point Vector;  //向量
struct Segment{ Point p1, p2; }; //线段
typedef Segment Line;  //直线
class Circle{public:  Point c;  double r;Circle(Point c = Point(), double r = 0.0):c(c),r(r){}
};
//typedef vector<int> Polygon; //多边形//排序算法模板
int swap(int &a, int &b){ int t = a; a = b; b = t; }
//冒泡排序
//1.相邻的数据两两比较,小数放前面,大数放后面
//2.这样每一次操作过后最小的数就被排在了最前面
void BubbleSort(int a[], int n){for(int i = 1; i < n; i++){ //循环有序数组,每次循环后保证到i位置的值是有序的。for(int j = n; j > i; j--) //循环无序数组两两比较if(a[j] < a[j-1])swap(a[j],a[j-1]); //如果是逆序对就交换(保证每次把最小的值往前交换)//Print(a,n);}
}
//插入排序
//1.数据分为两部分,一开始有序部分包含1个元素
//2.依次将无序部分的元素插入到有序部分当中
void InsertSort(int a[], int n){  //直接插入排序for(int i = 2; i <= n; i++){ //遍历无序部分,每次取出第一个元素int j = i-1, k = a[i];  //j为当前下标, k为无序部分第一个元素while(j>=1 && k<a[j]){ //找到k元素在有序部分的位置a[j+1] = a[j];    //循环的时候直接右移有序数组,为k腾出位置j--;             //不是k正确的位置,继续往前循环}a[j+1] = k;  //出来的时候j多减了1,要加回去//for(int i = 1; i <= n; i++)cout<<a[i]<<" ";  cout<<"\n";}
}
//选择排序
//1.在未排序序列中找到最小的元素,记录位置
//2.将它放到已排序序列的末尾(和第一个无序元素交换即可)
void SelecSort(int a[], int n){for(int i = 1; i <= n; i++){ //对于每一个位置的值(实质是未排序序列的第一个元素)int index = i;  //index:记录未排序序列中最小元素的位置for(int j = i+1; j <= n; j++) //遍历剩余未排序序列if(a[j] < a[index])index = j; //保证index是最小元素的位置swap(a[i],a[index]);//将最小的值放到未排序序列的第一个,完成排序//for(int i = 1; i <= n; i++)cout<<a[i]<<" ";  cout<<"\n";}
}
//快速排序
//1.每次选择一个基准数,把比之小的都放到其左边,大的都放到其右边
//2.排放时候的细节
void QuickSort(int a[], int n, int l, int r){if(l > r)return ; //递归出口,越界返回int k = a[l];//k就是基准数(k的选取与内循环的找数顺序有关)int i = l, j = r;//区间while(i < j){ //i==j时,两数相遇,//顺序有影响,先从右往左找,找到第一个比基准数小的位置while(i<j && a[j]>=k)j--;//切记‘>=’(可以忽略掉与k相等的值,不然i永远不会大于j,则死循环)//然后从左往右找到第一个比基准数大的位置while(i<j && a[i]<=k)i++;//如果他们没有相遇,就交换这两个数的位置,并继续寻找if(i < j)swap(a[i],a[j]);}//将基准数归位a[l] = a[i];  //相遇的位置a[i] = k;    //QuickSort(a,n,l,i-1);//递归后不用考虑基准数QuickSort(a,n,i+1,r);
}//数据结构模板
//并查集
struct UnionFindSet{int fa[N];UnionFindSet(int n){for(int i = 1; i <= n; i++)fa[i] = i;}int find(int x){  return fa[x]==x ? x : fa[x]=find(fa[x]);  }void merge(int u, int v){int x = find(u), y = find(v);if(x != y)fa[x] = y;}int query(int u, int v){return find(u) == find(v);}
};//图论算法模板
struct UndirectedEdge{ //图的边集存储int u, v, w;UndirectedEdge(){}UndirectedEdge(int u, int v, int w): u(u),v(v),w(w){}bool operator < (const UndirectedEdge & other)const{return w < other.w;}
};
//Kruskal
struct Kruskal{int n, m;UndirectedEdge edges[N];inline int kruskal(){int sum = 0,  count = 0;UnionFindSet ufs(n);  std::sort(edges, edges+m);  //对所有边进行排序for(int i = 1; i <= m; i++){if(ufs.find(edges[i].u) != ufs.find(edges[i].v)){ufs.merge(edges[i].u,edges[i].v);sum += edges[i].w;count++;if(count == n-1) break;}}return sum;}
};//有向图强连通分量
namespace Kosaraju{int n, m;vector<int>G[N], rG[N];vector<int>vs, cmp[N];int vis[N], book[N], cnt;void dfs(int u){if(vis[u])return ;vis[u] = 1;for(int i = 0; i < G[u].size(); i++)dfs(G[u][i]);vs.push_back(u);}void rdfs(int u){if(book[u])return ;book[u] = cnt;cmp[cnt].push_back(u);for(int i = 0; i < rG[u].size(); i++)rdfs(rG[u][i]);}
};struct Bigint{vector<int>s;int is_minus;Bigint(long long num = 0, int ok = 1){ *this = num; is_minus = ok;}//构造函数,元素初始值为0Bigint operator = (long long num){s.clear();do{s.push_back(num%10);num /= 10;}while(num > 0);return *this;}Bigint operator = (const string& str){s.clear();for(int i = str.size()-1; i >= 0; i--)if(str[i] == '-')is_minus = -1;else s.push_back(str[i]-'0');}Bigint operator + (const Bigint& b)const{Bigint c;  c.s.clear();Bigint n = *this, m = b;if(n.is_minus==-1 && m.is_minus==1){c = m-n;}else if(n.is_minus==1 && m.is_minus==-1){c = n-m;}else {if(n.is_minus==-1 && m.is_minus==-1) c.is_minus = -1;int x = 0, len = max(n.s.size(),m.s.size());//x是进位for(int i = 0; i < len; i++){if(len >= n.s.size())n.s.push_back(0);//不够长的话补0if(len >= m.s.size())m.s.push_back(0);c.s.push_back(n.s[i]+m.s[i]+x);x = c.s[i]/10;c.s[i] %= 10;}if(x)c.s.push_back(x);//最高进位len = c.s.size()-1;while(c.s[len]==0 && len>0)len--;c.s.resize(len+1);}return c;}Bigint operator - (const Bigint& b)const{Bigint n = *this, m = b;int ok = 1; //保证被减数大于减数if(n.s.size()<m.s.size() || n.s.size()==m.s.size()&&n.s<m.s){swap(n.s, m.s);ok = -1;}Bigint c; c.s.clear();int len = max(n.s.size(), m.s.size());n.s.resize(len); m.s.resize(len); c.s.resize(len);//改变大小自动补0防止内存错误for(int i = 0; i < len; i++){if(n.s[i] < m.s[i]){n.s[i] += 10;n.s[i+1]--;}c.s[i] = n.s[i]-m.s[i];}len--;//最后一位的坐标while(c.s[len]==0 && len>0)len--;//删去多余的0c.s.resize(len+1);//c.s.back() *= ok;c.is_minus = ok;return c;}Bigint operator * (const Bigint& b)const{Bigint n = *this, m = b;n.s.insert(n.s.begin(),0); m.s.insert(m.s.begin(), 0);Bigint c; c.s.clear();if(n.is_minus==-1 && m.is_minus==1)c.is_minus = -1;if(n.is_minus==1 && m.is_minus==-1)c.is_minus = -1;c.s.resize(n.s.size()+m.s.size());for(int i = 1; i < n.s.size(); i++){int x = 0; //进位for(int j = 1; j < m.s.size(); j++){c.s[i+j-1] += n.s[i]*m.s[j] + x;//原数+当前乘积+上次乘机进位x = c.s[i+j-1]/10;c.s[i+j-1] %= 10;}c.s[i+m.s.size()-1] = x;//进位}c.s.erase(c.s.begin());int len = c.s.size();while(c.s[len]==0 && len>0) len--; //删除多余的0c.s.resize(len+1);return c;}
};
istream& operator >> (istream &in, Bigint& x){string s;if(in>>s) x = s;return in;
}
ostream& operator << (ostream &out, const Bigint& x){if(x.is_minus == -1)out<<-1*x.s[x.s.size()-1];else out<<x.s[x.s.size()-1];for(int i = x.s.size()-2; i >= 0; i--)out<<x.s[i];return out;
}

0x02STL

//提供了STL的范例//顺序容器:vector, deque, list
//关联容器:set, map,
//适配容器:stack, queue, priority_queue
#include<iostream>
#include<set>  //基于红黑树
#include<map>  //基于平衡二叉树
#include<vector>  //时间换空间(逃
#include<string> //各种黑科技
#include<bitset>using namespace std;//操作整理:声明,插入,删除,查找,遍历
//用法整理:你自己想啊void setting(){set<int>myset; //声明int类型的集合(突然发现重名好像不会炸233333)//1. 基本操作myset.insert(233);  //往里面添加元素(重复插入无效)myset.erase(233);  //删除里面的某个元素(如果不存在该元素则不操作)(这里也可以用迭代器删除区间)myset.count(233); //查询集合中是否存在某个元素myset.clear();   //清空集合//2. 迭代器myset.insert(233);  myset.insert(322);set<int>::iterator it;  //如果重名声明迭代器的时候会炸掉set<int>::reverse_iterator rit; //反向迭代器for(it = myset.begin(); it != myset.end(); it++){cout<<*it<<" ";}cout<<"\n";for(rit = myset.rbegin(); rit != myset.rend(); rit++){cout<<*rit<<" ";}cout<<"\n";//3. 熟练搞事cout<< (myset.find(233)==myset.begin()) <<" \n"; //查找键值的位置并返回迭代器cout<< *myset.lower_bound(234)<<"\n";  //返回第一个>=key的元素的迭代器cout<< *myset.upper_bound(233)<<"\n";  //返回第一个>key的元素的迭代器
}void maping(){ map<int,int>mymap; //左键右值//1. 基本操作,,同为关联容器,基本和set差不多吧mymap[5] = 7;  //添加元素(注意 "mymap[0];" 同样往map中添加了元素,只是没有赋值而已)//2. 迭代器map<int,int>::iterator it = mymap.begin();cout<<(it->first)<<" "<<(it->second)<<"\n"; //map遍历时访问的是pair类型//3. }void bitsetting(){}void stringing(){string str = "123456789";  char ch[110]="233";//构造函数str = string(ch); //用c语言字符串s初始化str = string(5,'c');  //用5个字符c初始化string s1 = str;  //赋值操作//基本特性str.size(); //返回大小//各种操作str.substr(0, 2);  //返回子串,返回0开始的由两个字符组成的字符串}int main(){stringing();cout<<"Hello World"<<endl;return 0;
}

0x03框架什么的

//头文件模板
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<iomanip>
#include<sstream>
#include<cmath>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<list>//命名空间
using namespace std;//声明与宏定义
typedef long long LL;
typedef long double LD;#define fst first
#define sec second
#define mp make_pair//常量定义
const int N = 1e5, inf = 1e9;  //代替define的写法 & e计数法的使用//输入输出优化
int readint(){  //readint好简单啊为什么。。。int x=0, op=1;  char ch = getchar();  //一定要赋初始值while(ch < '0' || ch > '9'){ if(ch=='-')op=-1; ch = getchar(); }while(ch >= '0' && ch <= '9'){ x=x*10+ch-'0'; ch = getchar(); }return x*op;
}int main(){cout<<"Hello World"<<endl;return 0;
}

【代码模板】不存在的NOIP2016相关推荐

  1. NOIP2016天天爱跑步

    NOIP2016天天爱跑步 这题一看显然lca+树上差分,但是因为有w的限制不能直接加,所以考虑权值线段树合并, 每个选手的起点终点对于不同的节点的影响是不同的,这就非常麻烦了,但是可以发现无论如何他 ...

  2. pycharm代码模板设置

    pycharm代码模板设置 前言 实现效果 设置步骤 前言 在编写代码的过程中,运用模板可以减少很多重复操作,大大减少工作量. 例如,我想将下文的函数简化为只要输入[qt]两个单词,系统就会自动弹出该 ...

  3. 【NOIP2016】愤怒的小鸟

    Description Kiana最近沉迷于一款神奇的游戏无法自拔.  简单来说,这款游戏是在一个平面上进行的.  有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟 ...

  4. 整数二分查找原理及代码模板

    1.整数二分算法原理 ps:数组具有单调性,则一定可以使用整数二分算法:但是,能够使用整数二分算法的数组,数组未必具有单调性. 整数二分算法的本质:给定一个区间,在区间中定义了某种性质.该性质在区间的 ...

  5. 归并排序原理及代码模板

    1.归并排序[基于分治思想] 算法主要步骤: a.确定区间的分界点即区间[l, r]的中间位置:mid = l + r >> 1,分成左.右两边: b.递归排序左边.右边: c.将左.右两 ...

  6. 快速排序原理及代码模板

    1.快速排序[基于分治思想] 算法主要步骤: a.确定分界点x:q[l].q[(l+r)/2].q[r].随机选择一个数 b.调整区间[重点]: (1).使得左半边区间的数都小于等于x (2).使得右 ...

  7. 【 Sublime Text 】如何使用Sublime Text快速生成代码模板

    目录 背景 实现 Verilog模板 参考文章 背景 写的代码多了,会发现几乎每次都要敲那几行代码,例如写三段式状态机,我们只需要改变下内容即可,外壳永远都是一样,有没有方法来快速生成这样的模板呢? ...

  8. noip2016前的话[漫谈]

    今天是11月15日,离noip2016还剩三天: 今年我也是高二了,回首一下去年的时光,真的仿佛仍在昨天,我甚至现在还清楚的记得,当年那次我们做的每一件事: 星期五,回去与室友告别,得到了祝愿,乘公交 ...

  9. 题解 【NOIP2016】组合数问题

    [NOIP2016]组合数问题 Description Input 第一行有两个整数t, k,其中t代表该测试点总共有多少组测试数据,k的意义见[问题描述]. 接下来t行每行两个整数n, m,其中n, ...

最新文章

  1. 36岁自学python_Python语言基础
  2. 2020\Simulation_2\3.单词重排
  3. Storm-Flux简介
  4. 跟我学Java(配光盘)(跟我学)
  5. java集合——java.util.Properties类
  6. python编程类型_Python 基础编程 数据类型(一)
  7. [CV招聘]中科院空间应用工程与技术中心2019年校园招聘
  8. 计算机管理里面蓝牙音频有问题,win10更新到1903版,蓝牙音频存在问题,微软终于给出了解决方法-win10更新...
  9. [JSOI2008]Blue Mary的战役地图
  10. 你必须具有权限才能读取此对象_为啥手机APP要获取权限?这些权限不能随便同意...
  11. 在ubuntu下安装和配置vsftpd
  12. process下载与使用
  13. an ancestor violates the following Content Security Policy directive: “frame-ancestors ‘none‘”.
  14. Python深度学习婴儿啼哭声分类识别,测试集准确率67.5%
  15. 10年回顾:世界各地开发高手谈Java
  16. 分享6个目前网上赚钱比较稳定的方法!
  17. VMware下OSSIM 5.2.0的下载、安装和初步使用(图文详解)
  18. 细读《深入理解 Android 内核设计思想》(四)Binder 机制 [中]
  19. 火爆的人工智能项目都在这里了|Gitee项目推荐
  20. .Net4.0 任务(Task)

热门文章

  1. 标准模板库(STL) map —— 初始化问题
  2. 顺时针 vs 逆时针
  3. Python Tricks(十四)—— list 逆序的实现
  4. 面向项目(七)—— C/C++的兼容性
  5. GDB 使用教程(二)
  6. Spark 机器学习 —— KMeans
  7. URL vs URI
  8. C++基础——有关引用的问题
  9. 步骤条自定义图片_用函数公式查找图片?我可没骗你
  10. python中文意思-请问在python中**是啥什么意思?