ACM自用常用模板(c++版)
2017-08-11 10:20
288 查看
最近几次比赛每次都被一些题目坑到超时,所以把每次看到比较优秀的模板给抄下来,留着备用。
前面:
1.排列组合公式
2.最大公因数(gcd)
3.快速幂公式
4.大数运算
详细可见这位写的博客:http://www.cnblogs.com/teble/p/7224597.html
5.超大数据读取(比如acdream 1099题目)+部分排序(STL)
后面慢慢补。。。
前面:
typedef long long LL; //#define MOD xxx const int MOD=xxx;
1.排列组合公式
//C(m,n) LL C(int m,int n) { int k=1;//相当于C(m,n) LL ans=1; while(k<=n) { ans=((m-k+1)*ans)/k; k++; } return ans; }
2.最大公因数(gcd)
int gcd(int a,int b) { if(!a) return b; int c; while(b) {//非递归版 c=b; b=a%b; a=c; } return a; }
3.快速幂公式
LL qpow(LL a, LL b) {//a的n次方(可取模) LL ans = 1; while (b) { if (b & 1) { ans *= a; ans %= MOD; } b >>= 1; a *= a; a %= MOD; } return ans; }
4.大数运算
详细可见这位写的博客:http://www.cnblogs.com/teble/p/7224597.html
5.超大数据读取(比如acdream 1099题目)+部分排序(STL)
#include<iostream> #include <algorithm> #include<cstdio> using namespace std; const int N = 10e6; void scand(int &ans) { char c; ans = 0; while((c=getchar())<'0' || c>'9');//去掉空格类的东西 while(c>='0'&&c<='9') ans=(ans<<3)+(ans<<1)+(c-'0'),c=getchar(); } int a ; int main() { int n,k; cin>>n>>k; for(int i = 0 ; i<n;i++) scand(a[i]); nth_element(a,a+n-k,a+n); cout<<a[n-k]<<endl; } //nth_element(first,nth,end,compare) //比如a[10]中找出第2大的数,则为:nth_element(a,a+2-1,a+10) 减一是从第0大开始
后面慢慢补。。。
相关文章推荐
- [置顶] Nobleman__ ACM 比赛模板 (C++ && Java)个人总结 (不断更新) (自用)
- ACM常用C++模板 包括常用头文件
- ACM常用模板 字典序全排列
- ACM常用模板——数据结构——线段树
- 常用的C/C++工程Makefile模板
- c++STL中常用模板常用函数记录
- ACM JAVA+C常用方法模板
- ACM常用模板——字符串匹配——KMP
- C++模板常用使用方法介绍
- ACM常用模板——字典树
- ACM常用模板——数据结构——优先队列(堆)
- c++不常用功能之——类模板
- acm比赛常用模板
- 链表常用操作的实现-C++模板实现
- C++模板常用使用方法介绍
- 单向链表的常用操作(C++模板实现)
- ACM常用模板——数据结构——区间最值查询RMQ
- C++ STL模板库常用操作
- 最常用的设计模式---模板方法模式(C++实现)
- C++模板常用功能讲解