本文主要是介绍ACM_SKILLS(Update),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
vim配置
set nu
set history=1000000
set tabstop=4
set shiftwidth=4
set smarttab
set cindent
colo evening
set nobackup
set noswapfile
set mouse=a
map <F6> :call CR()<CR>
func! CR()
exec "w"
exec "!g++ % -o %<"
exec "! ./%<"
endfunc
imap <c-]> {<cr>}<c-o>O<left><right>
map <F2> :call SetTitle()<CR>
func SetTitle()
let l = 0
let l = l + 1 | call setline(l,'#include <stdio.h>')
let l = l + 1 | call setline(l,'#include <string.h>')
let l = l + 1 | call setline(l,'#include <iostream>')
let l = l + 1 | call setline(l,'#include <algorithm>')
let l = l + 1 | call setline(l,'#include <vector>')
let l = l + 1 | call setline(l,'#include <queue>')
let l = l + 1 | call setline(l,'#include <set>')
let l = l + 1 | call setline(l,'#include <map>')
let l = l + 1 | call setline(l,'#include <string>')
let l = l + 1 | call setline(l,'#include <math.h>')
let l = l + 1 | call setline(l,'#include <stdlib.h>')
let l = l + 1 | call setline(l,'#include <time.h>')
let l = l + 1 | call setline(l,'using namespace std;')
let l = l + 1 | call setline(l,'')
let l = l + 1 | call setline(l,'int main()')
let l = l + 1 | call setline(l,'{')
let l = l + 1 | call setline(l,' //freopen("in.txt","r",stdin);')
let l = l + 1 | call setline(l,' //freopen("out.txt","w",stdout);')
let l = l + 1 | call setline(l,' ')
let l = l + 1 | call setline(l,' return 0;')
let l = l + 1 | call setline(l,'}')
endfunc
输入输出外挂
//适用于正负整数
template <class T>
inline bool scan_d(T &ret) {char c; int sgn;if(c=getchar(),c==EOF) return 0; //EOFwhile(c!='-'&&(c<'0'||c>'9')) c=getchar();sgn=(c=='-')?-1:1;ret=(c=='-')?0:(c-'0');while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');ret*=sgn;return 1;
}
inline void out(int x) {if(x>9) out(x/10);putchar(x%10+'0');
}
strtok 和 sscanf 结合输入
空格作为分隔输入,读取一行的整数:
gets(buf);int v;char *p = strtok(buf," ");while(p){sscanf(p,"%d",&v);p = strtok(NULL," ");}
解决爆栈,手动加栈
\#pragma comment(linker, "/STACK:1024000000,1024000000")
STL
优先队列 priority_queue
empty() 如果队列为空返回真n
pop() 删除对顶元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列队顶元素
在默认的优先队列中,优先级高的先出队。在默认的 int 型中先出队的为较大的
数。
priority_queue<int>q1;//大的先出对
priority_queue<int,vector<int>,greater<int> >q2; //小的先出队
自定义比较函数:
struct cmp
{bool operator ()(int x, int y){return x > y; // x小的优先级高//也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高}
};
priority_queue<int, vector<int>, cmp>q;//定义方法
//其中,第二个参数为容器类型。第三个参数为比较函数。
结构体排序:
struct node
{int x, y;friend bool operator < (node a, node b){return a.x > b.x; //结构体中,x小的优先级高}//bool operator == (const person &ps) const;
};
priority_queue<node>q;//定义方法
//在该结构中,y为值, x为优先级。
//通过自定义operator<操作符来比较元素中的优先级。
//在重载”<”时,最好不要重载”>”,可能会发生编译错误
set 和 multiset
set 和 multiset 用法一样,就是 multiset 允许重复元素。
元素放入容器时,会按照一定的排序法则自动排序,默认是按照 less<>排序规则来排序。不
能修改容器里面的元素值,只能插入和删除。
自定义 int 排序函数:(默认的是从小到大的,下面这个从大到小)
struct classcomp {bool operator() (const int& lhs, const int& rhs) const{return lhs>rhs;}
};//这里有个逗号的,注意
multiset<int,classcomp> fifth; // class as Compare
上面这样就定义成了从大到小排列了。
结构体自定义排序函数:
(定义 set 或者 multiset 的时候定义了排序函数,定义迭代器时一样带上排序函数)
struct Node
{int x,y;
};
struct classcomp//先按照 x 从小到大排序,x相同则按照y从大到小排序
{bool operator()(const Node &a,const Node &b)const{if(a.x!=b.x)return a.x<b.x;else return a.y>b.y;}
}; //注意这里有个逗号
multiset
multiset<Node,classcomp>mt;
multiset<Node,classcomp>::iterator it;
主要函数:
begin() 返回指向第一个元素的迭代器
clear() 清除所有元素
count() 返回某个值元素的个数
empty() 如果集合为空,返回 true
end() 返回指向最后一个元素的迭代器
erase() 删除集合中的元素 (参数是一个元素值,或者迭代器)
find() 返回一个指向被查找到元素的迭代器
insert() 在集合中插入元素
size() 集合中元素的数目
lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器
upper_bound() 返回大于某个值元素的迭代器
equal_range() 返回集合中与给定值相等的上下限的两个迭代器
(注意对于 multiset 删除操作之间删除值会把所以这个值的都删掉,删除一个要用迭代器)
Treap
ZOJ3765 ….
这篇关于ACM_SKILLS(Update)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!