做题总结——连续更

星星之火,可以燎原

  1. 关于保留小数取整方面的问题:
    ①floor函数向下舍入为最接近的整数:-2.1,-2.9——>-3
    3.1,3.9——>3
    ②ceil函数向上取整为最接近的帧数:-2.1,-2.9——>-2
    3.1,3.0——>4
    ③对浮点数的四舍五入 12.5——>13
    12.4——>12
  2. 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,m<=1000
ans=0;
for(int i=1;i<=min(n,m);i++)
	ans+=(n-i+1)*(m-i+1);
  1. 氧气优化 & 臭氧优化
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
  1. a 年到 b 年的闰年的数量
(b/4-(a-1)/4)-(b/100-(a-1)/100)+(b/400-(a-1)/400)
  1. 在堆内定义优先队列时,尤其是小根堆要注意!:
priority_queue <int ,vector<int> ,greater<int> 这里要加上空格> que;
两个>>在一起是位右移运算
  1. 在堆内定义变量时,不要定义y1 不知道为什么会报编译错误,很多平台多这样比如洛谷
    比较正式的解读:传送门
    不方便跳转可以直接看图:图片是上面那篇博客的
    做题总结——连续更_第1张图片
  2. 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两点
  3. 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更新
忠告:
1.cout比printf,putchar(),puts(),以及自己编写的输出函数要耗时更长(尤其是循环里的输出)
2.cin类比1.,比scanf getline(), gets(),getchar(),以及自己写的输入函数等耗时更长 (尤其是循环里的输如)
3.位运算比乘除运算符要快
14. 2020.7.17更
在这里插入图片描述
遇见图片上这种输入的时候,应该选用如下的输入方式:
cin>>n;
getchar();
getchar();
getline(cin,string);
Linux环境中的换行和win环境下的换行是不同的,当在acwing上测试代码的时候,不会出现正确的输出,而在win环境中测试以上样例的时候,得到的正是正确的输出,而判题姬是Linux环境的,所以容易被编译器演,所以一定要注意这种类型的输入。

你可能感兴趣的:(有意思的小题目)