Codeforces Round #590

题目链接:Round #590
题目答案:官方EditorialMy Solution

A. Equalize Prices Again

签到题还WA了一发,向上取整有点问题:

//my wrong code, 1.0 * sum返回double
ceil(1.0 * sum / n);

//right code
(int)ceil(1.0 * sum / n);

//ceil()原型
double ceil(double x);

float能保证6位精度(有效数字),double能保证15位精度。但是floatdouble默认都只显示6位有效数字,所以一旦1.0 * sum / n大于6位,函数返回的double就显示不全,造成精度损失(比如结果应该是5336844,但返回5.33684e+006),故进行强制类型转换。

B1. Social Network (easy version)

题意:屏幕可以容纳\(k\)条短信,有若干朋友发来\(n\)条短信。如果某个朋友已经在屏幕上,不做改变;否则将其他朋友下移,新收到的朋友置顶。求最终自顶向下显示在屏幕上的朋友。
思路:按照题意模拟,我搞得有些繁琐(用queue + set来考虑是否将新来的短信放入屏幕,再用queue.size()\(k\)判断是否需要将旧短信pop(),最后将队列中的元素逆序输出)。

B2. Social Network (hard version)

数据量变到了\(10^5\)级别,官方题解和我在B1中的思路一致。不过最后输出我是先压栈,题解是先存入vector,再用reverse()函数逆序,复杂度\(O(nlogk)\)

C. Pipes

猜你喜欢

转载自www.cnblogs.com/EIMadrigal/p/11617248.html