蒟蒻的奇♂怪汇总

因为是我这只蒟蒻个人的奇♂怪汇总嘛,可能有些奇♂怪的东西或者不规范的语言出现啦,见谅见谅

1.luogu p1991 无线通讯网

500×500=25000orz

2.luogu p2401 不等数列

记得取膜多喝热水

3.STL_queue

经实践验证,!qs.empty()快于qs.size(),原因不明(按说找个变量记一下队列size然后查询不就是$O(1)$的吗)

4.luogu p2114 起床困难综合症

if(位运算) 括号++;

update on 2018.7.2:

发现位运算的优先级比小于号那一堆还低。。。

5.luogu p1877 音量调节

修改元素时注意下标是否合法

6.luogu P3375 KMP

把$nxt$数组开成char类型还找了半天为什么输出了负数 (我可能有毒吧=。=)

7.luogu P2918 买干草

对于一道求最小值的DP,dp数组赋初始极大值时不要超过最后取$min$时$ans$的初始值

8.luogu p1455 搭配购买

并查集+背包在每次合并代价和价值时要使用先记录起初的search()返回值
(不可以并查集合并操作后再调用search()进行查找)

9.luogu p1853 投资的最大效益

当背包问题中代价/价值为$kn$时可以在循环中用$kn/k$来表示,这样可以压缩dp数组空间从而缩小常数

10.递归

递归里的临时变量要在函数里声明(才能正常地递归求解)

11.矩阵乘求数列

初始条件包含的各项无法用矩阵乘法求出,应特判输出

12.迭代器

迭代器类似指针但不是指针,它通过各种重载运算符实现,可以看做一种特殊的数据类型。在vector中用lower/upper_bound取元素时,要这么写

vector<int>::iterator it=lower_bound(vec[x].begin(),vec[x].end(),k);
int ans=*it;

13.luogu p1284 三角形牧场

用计算函数时注意接受/返回的变量类型

14.luogu p3385 负环

注意输出是啥orz
(但我觉得可能只是这个出题人心理变态)

15.luogu p2891 最少的硬币

目测数组大小,然后数组又开小了...以后还是算算比较好orz

16.luogu p1282 多米诺骨牌

别瞎压行,别瞎压行,别瞎压行

取最小最大值时临时用到的变量在程序开头或者循环里声明,不要
为了压行在循环条件里定义(麻麻这个人怕不是zz)

17.luogu p1498 南蛮图腾

输出字符'\'时要写成'\\',因为'\'单独用是转义字符,'%'同理,它是输出时的标识符

18.luogu p1022 计算器的改良

float/double型的变量值为$0$时被负数除会变为$-0$,输出时注意判掉

19.待用

待用

20.网络最大流(存反边)

用异或$1$存反边时,第一对边应是先偶数后奇数,即$cnt$要从$-1/1$开始

21.luogu p1431 无序字母对

寻找欧拉回路时从度数最小的点开始,寻找普通的欧拉路时从度数最小的奇节点开始

22.luogu p1155 双栈排序

二分图首先是无向图

23.codeforces CF401D Roman and Numbers

为一个数组的下标为$[0][0]$的元素赋值有两种方法

int dp[2333][2333]={1};

int dp[2333][2333];
......
dp[0][0]=1;

第一种方法在数组空间大时编译耗时**远大于**第二种,因为这样写会将数组里下标为$[0][0]$的元素赋值为1,之后再将其他元素一个个赋默认值为$0$;而第二种写法下其他元素会直接默认(为$0$)。

24.luogu p1378 油滴扩展

correct: r=min(r,max(rr-node[i].r,0.0));

wrong:if(rr-node[i].r>0)$ $r=min(r,rr-node[i].r);

自己的逻辑问题。如果$rr-node[i].r<0$,应该返回$r=0$,面积不变,相当于继续搜索;而直接跳过会返回原来的$r$,造成面积被多减掉了一块

25.luogu p1441 砝码称重

注意传参和数组下标的**实际意义**

26.luogu p2051 中国象棋

c++数据下标为负时运行会爆出一个数,但是不会RE,在做递推/dp时可能会把它当成正常的答案,调试时要注意~~(欢迎使用pascal)~~

27.2018.5.4 模拟测试 向上!向上!

BFS判重时注意状态是如何扩展的,考虑用是否要用**多维**数组标记

28.记得开long long

嗯就是这样

29.luogu p2038 无线网络发射器选址

处理地图时注意区分节点与块,同时一定注意边界(开闭区间,从0还是从1开始计数,是否可能越界,越界如何处理)问题

30.lugou p1514 引水入城

BFS判是否越界时注意n/m的区别

31.luogu 1005 矩阵取数游戏

以string(stl)为基础的高精运算注意

return "0";

而不是

return 0;

32.luogu p3470

一个括号酿成的惨剧:

correct:return$ $2*((tmp<0)?(1-tmp)/2:0)+ap;

wrong:return$ $2*((tmp<0)?1-tmp/2:0)+ap;

33.STL

栈和队列取/弹元素时注意判断是否为空

34.神奇的东西

1 struct a{int num,cst;};
2 priority_queue<a> qs;
3 
4 balabalabala...
5 
6 while(!qs.empty()) 
7     printf("%d ",qs.top()),qs.pop(); 

居然可以正常输出qs.top()的num。。。

35.luogu p1040 加分二叉树

在中序遍历中,某个点左边的序列一定是这个点的左子树,右边的序列,一定在这个点的右子树中。

36.luogu p2746 Networks of schools

缩点时注意判断图是强连通图的情况

37.luogu p1502 窗口的星星

注意线段树的总区间

38.结构体

①结构体建立之初内部元素全部是随机的,不是默认为0

②赋整个结构体的值时其中元素必须写全,如

struct a
{
    int a,b;char c;bool d;
}show[10];
......
show[1]=(a){233,666,'Q',true};

就算你之后不用$d$你也不能写成:

show[1]=(a){233,666,'Q'};

这可能与结构体随机的初始值或者它内部的存储方式有关(我tm也不清楚,反正花上一分钟多写几句写明白比对着整体正确的代码调上几个小时好多了)

③举个例子,自己理解一下,比如你想对一类结构体$a$进行排序,但是在排序后又想通过某种方式分别出不同的结构体(如线段树扫描线的离散化,我这个教训就是花了两晚上从这里得出来的),单独开出一个变量,不要和之前用过的有意义的混着用,即使你赋过值了

39.pow函数

cmath库里的pow函数就是个垃圾,永远都不要用

40.luogu p4208 最小生成树计数

做生成树问题时注意**不联通**的情况

41.背包方案数

做这类问题时注意全都能买的情况下只有一种方案

42.luogu p3265 装备购买

有时**精度误差可以通过拆开计算式的方式解决**

43.luogu 2915 混合奶牛

abs(绝对值函数)是std这个namespace的内容

44.luogu p3377 左偏树(模板)

左偏树合并时注意先查找**当前所在堆堆顶**再合并

45.CF474F Ant colony

线段树查询区间$gcd$时不能进入完全不包含的区间,不然返回什么都不是=。=

46.luogu p2234 营业额统计

注意节点的初始编号

47.luogu p1867 钉子与小球

算术右移时注意爆int的问题

48.luogu p4318 完全平方数

当询问很少而整体范围很大时应该考虑单独处理每一次询问

49.p1641 生成字符串

组合数求逆元后相减时可能会减出负数来,记得像(num+mod)%mod这样处理。同时注意组合数的范围通常是$n+m$,要开$2*n$的空间

50.p4037 魔兽地图 & bzoj 3743 Kamp

DP中不能出现靠自己决策自己的情况,如果有这种情况要么记一个临时的变量最后赋给这个位置的$dp$数组(p4037),要么就是需要用“第二优先级”的值来更新(bzoj 3743)

51.p4124 手机号码

记忆化搜索的时候记得用你传进来的参数。。。

52.CF529A(524F) And Yet Another Bracket Sequence

三元运算符的优先级非常奇怪,记得多加几个括号

53.p2233 公交车路线

调不出来的时候就回去仔细读题

54.p2197 单选错位

当范围达到$1e7$的时候就该注意内存限制了

55.常数优化

register是真的管用,inline和普通快读个人认为作用不大,fread还可以,但是有局限性

56.p3964 松鼠聚会

long long取最小值时一开始能开多大就开多大=。=

57.p1360 黄金阵容均衡

截取一段作为答案时注意要不要在开头放一段来排除到结尾一段都没有的情况

58.调试语句

一定要记得删!!!

59.SCC

Tarjan缩点后建新图后一定要区分好新旧图

60.p1365 WJMZBMR打osu!/Easy

读入字符尽量读字符串后取出来,因为有换行符这个东西。。。

61.高精度

高精返回的时候记得加上'0',还有最好还是学学不用string的高精,毕竟大常数+CCF老爷机可能有危险

62.网络流

记得建反边!!!

63.p3144 关闭农场

并查集的题可以往正难则反上去想

64.一些防范低级错误的方法

因为目前全部都用的Devcpp,所以就写了Devcpp的,如有补充不胜感激

1.-Wall(显示最多警告)

像我这样脑残+手残的非常管用,对于一些不影响运行但实际上会让你运行的结果出来是个西瓜都不认识的东西的情况非常管用,比如函数没返回值或者数组开太大了(cmd2001学长在NOIP就因为一个bool函数没返回值挂了一道题......)

开启方法:Tools->Compiler Options->Settings->Warnings->Show most warnings(-Wall)

其余那几个没啥用。。。

2.C++11

~~希望我有用到这个的那一天~~

我以前一直不知道怎么开。。。这里要感谢一位路过的神犇@happyZYM

上届吉林有两个奆奆直接被这个送退役......因为C++11多了一些新的关键字,比如next(你的邻接表是不是这么写的=。=),auto(大概这个都知道),所以你应该在使用C++11标准评测时在本地先编译一下看看

开启方法:Tools->Compiler Options->Settings->Code Generation->Language standard(-std)->GNU C++11

猜你喜欢

转载自www.cnblogs.com/ydnhaha/p/9670472.html