做题总结——连续更

星星之火,可以燎原

  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+4r+4ri=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 不知道为什么会报编译错误,很多平台多这样比如洛谷
    比较正式的解读:传送门
    不方便跳转可以直接看图:图片是上面那篇博客的
    在这里插入图片描述
  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两点
原文地址:https://www.cnblogs.com/PushyTao/p/13144136.html