• Educational Codeforces Round 146 (Rated for Div. 2)(VP)


    写个题解

    A. Coins

    1. void solve(){
    2. ll n, k; cin >> n >> k;
    3. bl ok = true;
    4. if (n &1 && k %2 == 0) ok = false;
    5. print(ok ? yes : no);
    6. }

    B. Long Legs

    1. void solve(){
    2. db x, y; cin >> x >> y;
    3. if (x < y) swap(x, y);
    4. int t1 = ceil(sqrt(x)), t2 = ceil(sqrt(y)); //两个方向各自的最佳步长
    5. int ans = (t1 - 1) + ceil(x / t1) + ceil(y / t1);
    6. lfor (i, t1, sqrt(x) * 2){
    7. ans = min(ans, int((i - 1) + ceil(x / i) + ceil(y / i)));
    8. }
    9. print(ans);
    10. }

    讲一下b。

    秉着根据题目特性面向过程编程的思想,可以发现题目中有x和y两个方向,如果只有一个方向的话,那么最佳步长设为ty = (t - 1) + ceil(x / t),x是距离,ceil是向上取余,求导后可以得出当

    步长t=ceil(sqrt(x))时,y为极小值点,所以当只拿一个方向讨论的时候,可以得出当前方向上的最小步长。

    然而题目需要讨论两个方向,我们只要把这个思想拓展并应用到两个方向上即可。两个方向与一个方向的不同点,在于当两个方向都要运动时,步长+1带来的效益(操作次数变少)是双向的(对于x轴和y轴都有益),但是有一个阈值,当步长超过这个阈值时,再增加步长将没有意义。

    但是有一点可以确定,步长一定不会小于两个方向中距离较远的坐标的最佳步长,即最终的步长一定大于等于两个方向上的最佳步长的较大值。基于以上理论,可以确定步长的下限。再大致确定一下步长的上限,题目数据范围是1e9,一个比较合适的阈值上限是sqrt(1e9) + c,c是一个常数。或者直接k * (sqrt(1e9))也可。

    C. Search in Parallel

    贪心构造即可。

    1. void solve(){
    2. int n, s1, s2; cin >> n >> s1 >> s2;
    3. vpi query(n + 1);
    4. lfor (i, 1, n){
    5. cin >> query[i].first;
    6. query[i].second = i;
    7. }
    8. sort(RALL(query));
    9. vi a, b;
    10. LITER(x, query){
    11. auto[r, i] = x;
    12. if (1ll * (len(a) * s1 + s1) > 1ll * (len(b) * s2 + s2)){
    13. b.pb(i);
    14. }
    15. else{
    16. a.pb(i);
    17. }
    18. }
    19. cout << len(a) << " \n"[len(a) == 0];print(a);
    20. cout << len(b) << " \n"[len(b) == 0];print(b);
    21. }

    这里要提一点,题目指出了每种box的request次数,但是没有指出request是连续的,所以在写题目时很容易主观的将次数*查询时间作为代价,然后不断的将代价进行累积,这种做法会在case3 WA。正确的想法应该是将查询次数多的尽可能的往前靠,最后查询的总时间减少,即每次request都是一次单独的查询,最后的总时间也是单次查询的时间*对应的查询次数。 也就是说,当前的查询次数没有后继性。查询次数的重要性只体现在总时间的计算上。

    总结,B题告诉人们一定要用脑子思考

    C题告诉人们读题真的很难

  • 相关阅读:
    如何在 Linux 中删除超大的(100-200GB)文件
    Java中Date与LocalDate、LocalDateTime之间的区别及相互转换
    第一范式、第二范式、第三范式
    SGI STL 二级空间配置源码刨析
    Anchor-free目标检测综述 -- Dense Prediction篇
    三姐妹不吸烟患肺癌,做饭人需要了解油烟的三大危害
    数据可视化工具 ,不会写 SQL 代码也能做数据分析
    设计模式浅析(六) ·命令模式
    Python接口自动化封装导出excel方法和读写excel数据
    【Java基础】方法
  • 原文地址:https://blog.csdn.net/m0_73965117/article/details/133645194