星星之火,可以燎原
rush
- 1. 关于保留小数取整方面的问题:
- 2. Windows 模拟文件读入结束
- 3. 字符串读取
- 4. 很多题目需要用到初始化,我常用的有三种:
- 5. 半径为 r 的圆内整点
- 6. m*n的矩形中正方形的个数,0<=n,m<=1000
- 7. 氧气优化 & 臭氧优化
- 8. a 年到 b 年的闰年的数量
- 9. 在堆内定义优先队列时,尤其是小根堆要注意!:
- 10. 在堆内定义变量时,不要定义y1 不知道为什么会报编译错误,很多平台多这样比如洛谷
- 11. 矩阵种固定两点,所在直线整数点的个数
- 12. 求下(上)一个排列
- 13. ~~2020.7.15更新~~
- 14. Linux | Windows换行的不同
- 15. double | long double | __int128
- 16. n个点构成多少种树
- 17. long long和double之间的范围大小和精度损失问题
- 18. ull 自然溢出问题
- 19. C++ string查找是否存在某子串
- 20 . 比较特殊的多组输入
- 21. C++ string 的%s输出
- 22 . STL内存消耗问题
- 22. 有关scanf()函数 返回值
- 23. 有关lower_bound()进行查找的格式
- 24. 数据范围与复杂度关系
- 25 随机化
- 26. 浮点数转换为分式
1. 关于保留小数取整方面的问题:
2. Windows 模拟文件读入结束
ctrl + Z 可以模拟文件输入的结束即EOF
3. 字符串读取
对于字符串的情况,尤其是要读取空格,可以使用getline读取一整行。注意是不是应该加上getchar吸收换行。含有空格的字符串输出可以用gets(),自带换行
4. 很多题目需要用到初始化,我常用的有三种:
5. 半径为 r 的圆内整点
个数为1+4 * r+4 * ∑ ri=1sqrt(r * r - i * i)
6. m*n的矩形中正方形的个数,0<=n,m<=1000
7. 氧气优化 & 臭氧优化
8. a 年到 b 年的闰年的数量
9. 在堆内定义优先队列时,尤其是小根堆要注意!:
10. 在堆内定义变量时,不要定义y1 不知道为什么会报编译错误,很多平台多这样比如洛谷
比较正式的解读:传送门 不方便跳转可以直接看图:图片是上面那篇博客的
11. 矩阵种固定两点,所在直线整数点的个数
2020.6.1更
以A,B两点为端点的直线,经过两点间整数点的个数
A(x1,y1) B(x2,y2)
xx=abs(x1-x2);
yy=abs(y1-y2);
ans=gcd(xx,yy)+1;
ans包括A B两点
12. 求下(上)一个排列
2020.7.7更
原文链接 STL中有关于全排列的函数:
1)next_permutation:求下一个排列组合
a.函数模板:next_permutation(arr, arr+size);
b.参数说明:
arr: 数组名
size:数组元素个数
c.函数功能: 返回值为bool类型,当当前序列不存在下一个排列时,函数返回false,否则返回true,排列好的数在数组中存储
d.注意:在使用前需要对欲排列数组按升序排序,否则只能找出该序列之后的全排列数。
比如,如果数组num初始化为2,3,1,那么输出就变为了:{2 3 1} {3 1 2} {3 2 1}
2)prev_permutation:求上一个排列组合
13. 2020.7.15更新
14. Linux | Windows换行的不同
2020.7.17更
遇见图片上这种输入的时候,应该选用如下的输入方式:
cin>>n;
getchar();
getchar();
getline(cin,string);
Linux环境中的换行和win环境下的换行是不同的,当在acwing上测试代码的时候,不会出现正确的输出,而在win环境中测试以上样例的时候,得到的正是正确的输出,而判题姬是Linux环境的,所以容易被编译器演,所以一定要注意这种类型的输入。
15. double | long double | __int128
2020.8.15更
小细节:
%lf-----double
%Lf------long double
__int128占用 16个字节
16. n个点构成多少种树
2020.8.17更
n个点可以构成的不同的树有 n(n-2)种
17. long long和double之间的范围大小和精度损失问题
2020.8.30更
long long 和double 在上面来看都是八个字节,每个字节是八位总共有64位,但是考虑到double 后面还有符号位,所以,对于整数部分,long long 是要比double要大一点的;附上大佬博客
18. ull 自然溢出问题
(2020.9.16更)
在C++中,对于数据过大会发生溢出这种情况,导致得到负值或者是其他相差很大的数,但是用unsigned long long的时候,如果溢出,会发生自然溢出现象,如果所存储的数据范围大于 264 -1 ,会自动 取余 264 -1;
19. C++ string查找是否存在某子串
(2020.9.27 更)
在C++中string的使用字符的子串的查找string.find() 与 string::npos
如果在一个字符串如
如若查找子串 “ghi”
则要使用
如若查找到,则返回的结果是所要查找的子串的第一个字母在主串中的下标
如若没有查找到,则是一个很大的数,所以说,如果想要如果要判断这个字符串是否在主串中出现的情况,则要使用
用法实例:
20 . 比较特殊的多组输入
(2020.10.2更)
如果要连续输入若干个数,而且这些数中可能会有很多个空格或者是换行,比如:
这时应该使用
21. C++ string 的%s输出
(2020.10.4更)
很多时候在写代码的时候会用到string这种东西,但是却只能够用cout进行输出(如果强制使用printf输出会导致乱码),这就有可能被卡掉,而导致超时,无意之中看见了大神的代码
发现string中有一个函数 c_str可以转换为用printf进行输出,瞬间感觉舒服了
具体使用方法如下:
:
22 . STL内存消耗问题
2020.10.6更
在做题的时候无缘无故的发现被卡了内存超限,然后在codeforces上叫了一下发现没问题,然后去找题目的内存限制,发现Codeforces上面的内存设置的大小是 512M,然后发现UPC平台上是128M,又改了一下代码,将用C++STL 中的map容器计数换位普通的数组之后,就很神奇的通过了这道题,后来去网上百度了一下map容器的内存问题,具体可见:
发现map的内存消耗确实是个问题
这样来说能不用STL就不用叭
从容的看了看内存消耗,发现
差距过大!!!!!
22. 有关scanf()函数 返回值
2020.10.24更
有关scanf()函数 返回值的问题,比如要输入两个数a,b
如果a和b都被成功读入,那么scanf的返回值就是2,如果只有a被成功读入,返回值为1,如果a和b都未被成功读入,返回值为0,如果遇到错误或遇到end of file,返回值为EOF。(经常用在多组输入里面)
所以说scanf返回的就是已经读入的数的个数
23. 有关lower_bound()进行查找的格式
2020.12.04 更新
有关lower_bound()进行查找的时候,格式如下:
其中,A是起始点,B是终止点,C是要查找的数,firstpos顾名思义就是首地址
用来查找第一个大于等于C的数对应的下标
具体的方法如下:
上面的式子对应的数据及结果便是
一共六个数,第一个大于等于0x3f3f3f3f的数的后一个数是5,在下标为3的位置,所以最终的结果就是3
有关lower_bound()查找的时候,返回的是数组的下标,查找的区间(按照上面的例子来说)是从 [dp +1 ,dp + 1 + n),
这个区间是左闭右开
24. 数据范围与复杂度关系
2021-4-5更新
原文网址
5105 n * sqrt(n)
1e6 ~ 5e6 n * log
1e7 nlog -> TLE,要O(n)
6000 * 6000 * [1,16]常数可以接受
7000 * 7000 -> n^2
500 * 500 * 500 ->n 3
25 随机化
2021.8.20更新
26. 浮点数转换为分式
2021-10-12更新
先只是考虑小数点后的部分:
对于一个浮点数,假如它的循环节长度为6,即循环节为,那么可以将其转换为
,循环节的长度是多少,就除以一个长度为多少的每位为9的数
假如小数点后面的数字不全属于循环节的部分,那么说我们就可以将不属于循环节的部分挪到整数部分,然后最终再把结果除一下即可
比方说:
循环节长度为9 转换为分式就是
如果对于来讲,就是
而对于
且循环节长度为2的情况,我们应该:
=>