zoukankan      html  css  js  c++  java
  • CodeForces 思维题选做

    我说是思维题那就肯定不是思维题。


    CF1292B Aroma's Search 大意是给一堆有规律的点和起始坐标求最大能经过的点数,反正是一个简单的贪心策略,现在大致证明一下:对于 (forall 1 le p le operatorname{Limit}) 都有先往小的方向走再往大的方向走。

    首先往小的方向走显然是正确的贪心策略,对于一个坐标集 (x_i=a_x imes x_{i-1} + b_x, space y_i = a_y imes y_{i-1} + b_y) 分布巨大多显然是从稠密到稀疏,所以往稠密的部分走没什么毛病。

    直到这里还没什么问题,因为如果走到头了,也就是走到 ((x_0,y_0)) 时间不够了直接停止,那后面的时间呢?为什么回头走还最优啊?

    这里直接暴力计算一下,((x_i,y_i) ightarrow (x_{i-1},y_{i-1})) 显然路程为 (x_i+y_i-x_{i-1}-y_{i-1}),因为有单调性。那么就有 ((x_i,y_i) ightarrow (x_0,y_0)) 路程为

    [sumlimits_{j=1}^{i}x_j+y_j-x_{j-1}-y_{j-1}=x_i+y_i-x_0-y_0 ]

    然后显然有 ((x_{i},y_{i}) ightarrow (x_{i+1},y_{i+1})=(x_{i+1}+y_{i+1}-x_i-y_i)),把题目中的条件代进去就是
    (a_x imes x_i + b_x + a_y imes y_i + b_y-x_i-y_i)
    (=(a_x-1)x_i+(a_y-1)y_i+b_x+b_y)

    (ecause a_x ge 2, space a_y ge 2,space b_x ge 0,space b_y ge 0space herefore (x_{i},y_{i}) ightarrow (x_{i+1},y_{i+1}) ge x_i+y_i)
    同理有 ((x_i,y_i) ightarrow (x_0,y_0) le x_i+y_i)

    那么显然有 ((x_i,y_i) ightarrow(x_0,y_0) le (x_i,y_i) ightarrow(x_{i+1},y_{i+1}))
    然后就出来了走左边更优,你这时走回去也就是两倍的路程而已,先走左边全部的甚至比往右边走一步还要优。所以就是这么简单,我可能写复杂了。


    CF1304C Air Conditioner 每一分钟可以让温度 (pm1),求是否能满足每一时刻正好在某一区间内。
    巨大多简单题,每一次求出可能的目标区间然后判断即可,注意求线段交可以用 min, max


    CF1355F Guess Divisors Count 交互题,猜一个数 (1 le Q le 10^9),最多查询 (22) 次,答案误差不超过 (pm 7),每次询问给出 (gcd(x,Q)),最后输出这个数的因数个数。

    根据唯一分解定理,你可以乱查询。
    但是限制是 (22) 次所以你并不能这么做,所以想到把一大堆询问质数合并成询问一个数,也就是它们的乘积,然后对于这个询问出来的 (gcd) 分解出来质因数。

    然后这里我认为是一个比较妙的 trick,也就是对于一个质数 (p) 求出 (w_{max}) 使得 (p^{w} le 10^9) 也就是 Limit,然后这个数和 (Q) 求一下 (gcd) 就可以得出其次数,这样搞就可以很快得出答案了。

    所以最劣询问次数就是把所有询问的连乘积给询问一遍,然后对于每一个连乘积的每一个质因子你都要询问一下,但是因为 (1 le Q le 10^9) 所以质因子的个数都有限制,所以这个 (22) 显然可以满足。


    CF1313D Happy New Year
    每一个区间可以选或不选,选的区间贡献都 (+1)
    现在要求序列中最大的可能奇数个数。

    首先加奇偶显然转化成异或方便理解。
    然后看到 (k) 的范围这么小所以想到带个有关 (k) 的复杂度,然后想到了状压。
    可能跟一般的状压不太一样,这里直接拿一个 allocate 数组进行分配操作,然后显然就有 DP 柿子了,因为是奇数所以转移奇数项,另外一开始的时候要拆一下,这是一个小 trick,把一个操作 ([L,R]) 转化为 ([L,1])([R+1,-1]) 差分。


    CF1322B Present(igoplus_{i=1}^{n}igoplus_{j=i+1}^{n}(a_i+a_j))(n le 4 imes 10^5)

    按位考虑,考虑进位情况以及每一位最后的奇偶性。

  • 相关阅读:
    sparse用法matlab官方说明
    C++双向循环链表
    循环链表以及迭代器的使用c++
    顺序队列c++
    顺序栈c++
    尾插法链表
    邻接表建立图
    深度优先搜索树与广度优先搜索树
    tensorflow-笔记02
    深度学习-框架介绍
  • 原文地址:https://www.cnblogs.com/lbn233/p/CF-Interesting-Problems.html
Copyright © 2011-2022 走看看