做题总结——连续更
星星之火,可以燎原
rush
- ==星星之火,可以燎原==
-
- 1. 关于保留小数取整方面的问题:
- 2. Windows 模拟文件读入结束
- 3. 字符串读取
- 4. 很多题目需要用到初始化,我常用的有三种:
- 5. 半径为 r 的圆内整点
- 6. m*n的矩形中正方形的个数,03
②ceil函数向上取整为最接近的整数:-2.1,-2.9——>-2
3.1,3.0——>4
③对浮点数的四舍五入 12.5——>13
12.4——>12
2. Windows 模拟文件读入结束
ctrl + Z 可以模拟文件输入的结束即EOF
3. 字符串读取
对于字符串的情况,尤其是要读取空格,可以使用getline读取一整行。注意是不是应该加上getchar吸收换行。含有空格的字符串输出可以用gets(),自带换行
4. 很多题目需要用到初始化,我常用的有三种:
①memset(数组名首地址,想要初始化的值,sizeof 初始化的范围) 例如memset(num,0,sizeof(num));注意只能是初始化成-1,0,0x3f3f3f3f,0x3f3f 其余的十六进制没有试过 ②fill(数组名首地址,初始化的范围,初始化的值); 例如:fill(a,a+10,0);这个函数可以初始化成为任一值 ③最最最保险的方法莫过于for循环,相对于以上两种方法估计还不会导致超时!!!==有的题目多组输入会因为每次进行初始化,消耗的时间会很长导致超时== 5. 半径为 r 的圆内整点
个数为1+4 * r+4 * ∑ ri=1sqrt(r * r - i * i)
6. m*n的矩形中正方形的个数,0>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
如果在一个字符串如string s = "abcdefghijklmnopqrst";
如若查找子串 “ghi”
则要使用s.find("ghi");
如若查找到,则返回的结果是所要查找的子串的第一个字母在主串中的下标
如若没有查找到,则是一个很大的数,所以说,如果想要如果要判断这个字符串是否在主串中出现的情况,则要使用if(s.find("ghi") != string::npos)
用法实例:
20 . 比较特殊的多组输入
(2020.10.2更)
如果要连续输入若干个数,而且这些数中可能会有很多个空格或者是换行,比如:
这时应该使用while(scanf("%d",&a[t])==1){ } 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容器的内存问题,具体可见:
知乎大神的回答
CSDN某大神的回答
发现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()进行查找的时候,格式如下:int ans =lower_bound(A,B,C) - firstpos;
其中,A是起始点,B是终止点,C是要查找的数,firstpos顾名思义就是首地址
用来查找第一个大于等于C的数对应的下标
具体的方法如下:int ret = lower_bound(dp+1,dp+1+n,0x3f3f3f3f) - (dp + 1);
上面的式子对应的数据及结果便是
int ret = lower_bound(dp+1,dp+1+n,0x3f3f3f3f) - (dp + 1); printf("%dn",ret); for(itn i = 1;i