适应Noilinux
1.终端操作
打开终端 (Ctrl+Alt+T)
打开文件夹 (cd) +名称
新建文件夹 (mkdir) +名称
打开 (vim) 配置 (vim ~/.vimrc)
打开 (vim) 文件 (vim) + 文件名
2.强大的(Vim)配置
set nu
set mouse=a
set tabstop=4
set shiftwidth=4
set autoindent
set smartindent
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {}<ESC>i
inoremap " ""<ESC>i
inoremap ' ''<ESC>i
color desert
map <F9> <Esc>:w<CR>: !g++ % -o %< && ./%< <CR>
imap <F9> <Esc>:w<CR>: !g++ % -o %< && ./%< <CR>
3.(Vim) 操作
复制 (n + yy)
粘贴 (p)
删除 (n+dd)
撤销 (u)
退出死循环 (Ctrl+c)
放大字号 (Ctrl+shift+'=')
缩小字号 (Ctrl+'-')
保存 (:w)
退出 (:q)
进入插入模式 (i)
退出插入模式 (Esc)
4.对拍
system("./data > data.in");
system("./1 < data.in > try1.out");
system("./2 <data.in > try2.out");
if(sytsem("diff try1.out try2.out")) printf("WA
");
else printf("AC
");
5.千万不要闲的用鼠标滑轮!会意外退出!
6.写 (Vim) 时刻注意保存!
7.(Noilinux) 密码 123456
易犯错误
1.头文件
别忘了 #include<cmath>
和 #include<cstring>
对拍测时间 #include<ctime>
((clock()))
2.(using) (namespace) (std;) 别忘写!
3.数组大小
无向图边 (m imes 2) ,注意边数与点数
不同数组大小不同时一定要区分!
for(int i=0;i<MAXN;i++)
注意取不到等!
4.数组名称不要搞混
变量((i),(j))别写反
5.取模运算
出现减法时 ((\%P+P)\%P)
需要取模的变量,在任何操作后都要去取模!不要漏!
6.溢出
判断 (int) 是否需要转 (long long)
运算中间量要不要转
7.(double) 问题
判断相等时 (fabs(r-l)<eps)
8.位运算
注意优先级,疯狂加括号
不要轻易取反(符号也会变)
9.做题细节
看题不要看漏!题目最细小的地方!!
考虑特殊情况,不要漏!
10.想题时
多举反例,想出一些思路是先别急着高兴,往后想
限时想题,及时放置
动态规划时间复杂度=状态数 ( imes) 转移时间!转移时间别漏了!
11.输入大于 (10^5) 加读入优化
12.代码实现细节
树链剖分:
求重子时别忘了 size[u]+=size[v]
根节点不要 (dfs) 两遍;在 (dfs) 前赋值
倍增:
数组下标问题,别越界
线段树:
下放 (lazy) 的同时正确更新 (sum)
结构体名别写错
强连通分量:
(vis) 表示进栈情况:0--未进过,1--在栈中,2--已出栈
字符串哈希:
想好是否真的可用
加1减1的事情想清楚,多对拍
并查集:
路径压缩 int getfa(int x) { return x==fa[x] ? x : fa[x]=getfa(fa[x]); }
初始化 (fa[i]=i)
(Dijkstra):
堆优化,(pair) 注意第一关键字为 (dis)
(SPFA):
(dfs) 版的 (vis) 表示是否正在遍历
判负环可将 (dis) 都设成0
差分约束系统:
大于等于还是小于等于
欧拉回路:
注意在访问完一个节点后,将其加入倒叙的 (ans) 中
平衡树:
更新 (size) 等时别忘了加上自己的
常见思想
1.求某某最值 -> 转化为二分+判定(前提有单调性)
2.问题分解
3.将问题等价转换
4.有时多求一些东西,包含了答案
5.图论与数据结构相结合,动态规划、数论与图论结合(分层图)
猜结论,找规律——数论大胆推&发现;图论谨慎证明;动规小心陷阱
情况考虑周全——多举反例&特殊例子;眼光放开
不要想麻烦——排除干扰,简化题意;从简单算法(二分、数组)想起
小技巧
1.预处理,前缀和…
2.枚举子集时 for(int i=t;i;i=(i-1)&t)
3.用 (stl) 中的 (set)