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; //EOF
    while(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 ….

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值