qwq不断更新的总结【NOIP前夕】
来源:互联网 发布:淘宝详情关联模板 编辑:程序博客网 时间:2024/06/16 10:27
其实主要是一些做题时遇到的小问题小方法等等,希望在这里能给大家一点帮助√
召唤链接版目录:
- 一知识类
- 错误提示
- 头文件
- 强转 long double 精度 unsigned
- 程序对拍
- Cena调试
- 程序占用空间大小计算
- 二技巧类
- 多组输入以0结尾表输入结束
- 重载系列
- inline 和 register
- 线段树左右儿子美观定义
- 数组大小定义const
- 变量类型定义
- 手读手输 or 快读快输
- 结构体排序
- 三思想类
- 乱七八刀的小想法
- dp维数
- 滚动数组
- 板子集合
- 四考试注意事项
- 五不知怎么分类
- Markdown
下面开始我们的正题吧√
一、知识类:
错误提示
一些编译中出现的小错误分析
http://blog.csdn.net/qq_36693514/article/details/77905589
另外一些稍微点出来一下:
TLE
有时候是因为时间复杂度过高,但也可能因为你对一个数组赋值,而且这个数组开的太大,倒是memset赋值贼慢超时。。。
特别惨的TLE是你的文件输入输出写错了(写成了别的名字)
MLE
望天哭,开小了数组是爆栈崩溃访问无效内存,开大了是全崩,这两项都能凭借滚动数组优化(但是滚动数组优化时间得看情况,很有可能会更慢2333)
RE
数组开小或者栈溢出访问无效内存奇怪的错误
CE
mmp给赋初值太大都有可能本地评测通过但是最终评测机上CE掉,更加脑残的是不小心定义关键字的时候那死的叫个无声无息
PE:
感觉比CE还惨烈
CTLE:
。。至今,,自己还未亲身还没遇到,编译超时。。额,,
头文件
#include<bits/stdc++.h>
万能头文件在很多OJ上都能直接用,(poj好像除外,Cena有的评测路径中直接判处CE立即执行)
但还是推荐大家写出头文件emmm,有助于大家理清思路
cstdio freopen和scanf
window.h system(“pause”);
(不过好像没有window有cstdlib这个是可以的?大概是头文件是cstdlib带有这几个:
exit, getenv, system
在cstdlib里存在这个
函数名称: exit
函数原型: void exit(int state)
函数功能: 程序中止执行,返回调用过程
关于取整函数:
#include<cmath>
< cmath >库包括
① double类型
ceil-上取整 floor-下取整
② log2()和log10()有效
log()同样有效,底数为e(自然对数)
↑实验得出
强转 , long double , 精度 , unsigned
double a=0.9;cout<<(int)a<<endl;-->"0"
long double
这竟然不能直接定义输入,实现的话需要定义int变量再强转成long double才可以,不然会莫名挂掉【清北十一测试亲身体验】
int n,k; ans=(long double)n/k;
精度
关于精度问题则是要注意类型的转换,像是求一个double却在到处里都是int,容易出现错误,尤其注意pow里面emmmmm 好多人CE都是显示pow(X,X)is xxxxxxx
妈耶
unsigned:无符号长整型!
ε=(´ο`*)))
一旦取到负值这个unsigned long long就要炸掉,,,在求等比数列通项公式的时候千万注意有减法的地方不要上unsigned,真的炸掉
程序对拍
将暴力与你的正解进行对拍增加正确性和rp
http://blog.csdn.net/qq_36693514/article/details/78237082
Cena调试
坑,待填
G++ MinGW32的某种允许的调试 C:\MinGW\bin\g++.exe %s.cpp -o %s.exe
程序占用空间大小计算
由于会牵涉到动态申请空间或者递归啊队列啊调用过多这样的问题,所以我们先单纯的看看怎么计算数组占了多大空间
将数组总大小算出来再除以1024(将b转为Kb),然后再除以1024(将Kb转成Mb),这就是我们所最终用到的空间大小了
N维数组的计算方式是每一维的大小乘起来emmmmm所以说不要乱开数组大小,真的会惨遭MLE的
二、技巧类
多组输入以0结尾表输入结束
法一:
while(1) { scanf("%d%d%d",&x,&y,&val); if(x==0&&y==0&&val==0) break; }
法二:
{while(~scanf("%d",&n)&&n) }sort(a+l,a+r)
法三:
while(scanf("%d",&n)!=0){ if(n==0) break; ...}
重载系列:
默认の大根堆/优先队列 重载为小根堆
前注:
priority_queue
–>是默认大根堆
重载<运算符
bool operator <(const yuan &a,const yuan &b){ return a.r<b.r;}
重载max/min
法一:
inline int max(int a,int b){ return a > b ? a : b;}
法二:
#define max(a,b) ((a) > (b) ? (a) : (b))#define min(a,b) ((a) < (b) ? (a) : (b))
重载高精运算符
详见高精度系列【躺】
http://blog.csdn.net/qq_36693514/article/details/78301128
inline 和 register
首先说一下inline
这是个好东西√,加到函数前头,据说可以用这个来快快跑
但是inline也有弊端,如果函数递归很多次,比如dfs就不适合,用了之后会占用程序编码空间emmmm
====================================================
再说一下register
实现方法:
#define RI register int
这个东西的具体用法是:
for(RI i = 1;i <= n;i ++) read(num[i]),maxn = max(maxn,num[i]);
应用到for循环之中emmmmmm……..
对于优化有奇效
注意:
如果直接在主函数外定义变量,那么:
13 4 [Error] register name not specified for ‘xxx’
就会有这样的错误(但是在自己定义的函数中用的话就没有问题)
不过应用到主函数中定义就完全可以应用,这样的话不会报错
线段树左右儿子美观定义
线段树左右儿子p*2,p*2+1的美观定义法
#define ls i<<1 //左 #define rs i<<1|1 //右 #define m(i) ((q[i].l + q[i].r)>>1)//中间节点
数组大小定义const
此外向size/SIZE maxn/MAXN 等等只是名字不同而已,个人喜好嘛
const int sz = 1010;int num[sz];
变量类型定义
typedef派
typedef long long LL;
define派
#define LL long long
注意后面有无分号以及之间顺序
手读手输 or 快读快输
快读是qdez的大佬们的读法,我一般读手读emmmmm
inline void read(int &x){ x = 0;bool flag = 0;char ch = getchar(); while(ch < '0' || ch > '9') {if(ch == '-') flag = 1;ch = getchar();} while(ch >= '0' && ch <= '9') {x = x * 10 + ch - '0';ch = getchar();} if(flag) x *= -1;}inline void write(int x){ if(x < 0) putchar('-'),x *= -1; if(x / 10) write(x / 10); putchar(x % 10 + '0');}
还有isdigist来判断的,不过不想写了emmmm,感觉这个更简洁明了好理解
结构体排序:
sort函数的三个参数
第一个-开始值的地址 第二个-结束值的地址 第三个-排序的函数,若没有则默认为升序排列
记住函数return中大于为降序,小于为升序.
现在说对结构体数组的排序;
#include<iostream>#include<algorithm>using namespacestd;struct node{ int a; int b; double c;}arr[100];bool cmp(node x, node y)//要定义成bool形{ if(x.a !=y.a) return x.a < y.b; if(x.b != y.b) return x.b > y.b; return x.c > y.c;}//先根据a升序排列若相等则根据b来降序排列 否则 按照c降序排列;sort(arr, arr+90,cmp);//直接加+90而不是作为下标,
定义bool函数,形参为结构体变量,用结构体变量元素排序:
bool cmp(es l, es m)
{
if(l.a == m.a) return l.b > m.b;//结构体按照b元素的降序排列;
return l.a < m.a;//结构体按照a元素的升序排列。
}
三、思想类
⑧乱七八刀的小想法
dp维数
对于DP来说真是一切皆有可能,状态表示不出来二进制状压,维数不够了填维,在面对了九维DP之后人生仿佛已经无所畏惧(三维树形?四维棋盘型?五维递推转移?不够看),九维效果
dis[ ][ ][ ][ ][ ][ ][ ][ ][ ] ← 再脑补for循环,自行体会
滚动数组
真是个好东西23333
http://blog.csdn.net/qq_36693514/article/details/78279869
板子集合
半坑,正在打
http://blog.csdn.net/qq_36693514/article/details/78079522
四、考试注意事项
1、在128MB内存下,对于int类型(一个int四个字节),数组最多开3200w,对于bool类型(一个字节),可以开四倍;
2、1s时间限制下,计算机可以计算的次数我们认为是1e8次;
3、考试的时候不会正解就努力写暴力吧,
写暴力的时候拿全带特判的分,比如给你棵树,有一条链的数据点
一些n == 1,n == 2可以手算打表的点,这些特判可能比较麻烦,但是好拿分,比如斗地主的30分打表;
4、注意运算符的优先级,这个很容易出错,用define写一些东西的时候,别管什么都加括号(写一些带运算的东西的时候),用位运算的时候拿不准就都加括号,特别注意位运算和逻辑运算符(==,<=),的优先级问题
5、数组别开小了,尤其是倍增的时候,好几次数组开到20然后访问下标20了,一定要开够,不能RE(RE和MLE都要罚跑圈的w)
6、文件操作别写错,尤其是r和w,这个翻车无输出简直是人间惨剧惨绝人寰
7、书接上回,文件操作不写错也不代表一定躲得过这一劫,很有可能把freopen一个激动开到int或者void函数中然后无限死循,也很有可能考试考完,打完cpp A,B,C之后,结果给文件名叫B和C的cpp文件中一个激动粘贴上了freopen(“A.in”,”“r”,stdin); 这样会造成无限TLE,从第一个点开始T完所有点,而且时间几乎一样,人间惨案
8、一定要注意题目是不是给定“过滤行尾回车空行”,有时顺手写个puts(“”);或者‘\n’会直接开心的PE掉(虽然显示的仍是WA ε=(´ο`*))))
五、不知怎么分类
Markdown
字体大小颜色
<font size="5" color="red" face="" >233<font size="5" color="black" face="楷体" >233<font size="5" color="red" face="宋体" >233<font size="5" color="red" face="黑体" >233<font size="5" color="red" face="隶书" >233
示例:
233
233
233
233
233
><font size="5" color="black" face="楷体" >><font size="8px" color="#01B468">字体大小颜色
示例:
字体大小颜色
- qwq不断更新的总结【NOIP前夕】
- 跳槽前夕的三年总结
- NOIP 前夕 模板整理
- 总结前夕
- [置顶] 跳槽前夕的三年总结
- Skyler2003的资源QwQ
- ACMer?不存在的QwQ
- QWQ电面总结:Bloomberg
- NOIP前夕模板整理第一弹:图论
- NOIP前夕模板整理第二弹:数据结构
- 元旦前夕,总结我的2014,展望2015
- 毕业前夕的思考
- 离职的前夕
- 国庆节前夕的夜晚
- QwQ 最近的碎碎念吧
- 函数的用法(不断更新,总结)
- coco2dx开发的小总结篇章 不断更新
- 【LaTeX】Yap的使用总结-不断更新
- 这是我的博客
- 小知识Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
- 使用litepal数据库框架出现表未创建成功
- java的动态代理机制详解
- Python 之 __new__() 方法与实例化
- qwq不断更新的总结【NOIP前夕】
- 虚幻4中的动画技术【2】引擎中的各种资源详解
- 死锁
- 市场规模的估算
- 排序矩阵(杨氏矩阵)找从小到大的第K个数(C++)
- 【s5p4418嵌入式学习】分步编译之kernel编译04
- Ubuntu安装anaconda做英文词云
- sscanf:从一个字符串中读进与指定格式相符的数据
- P08: 泛化物品