首页 > 其他分享 >CF1406E Deleting Numbers

CF1406E Deleting Numbers

时间:2024-10-08 18:34:39浏览次数:7  
标签:10 le 质数 查询 CF1406E 因子 Numbers 操作 Deleting

题意简述

交互题,给定集合 \(S=\{1,2,\cdots,n\}\) 和一个隐藏的数 \(m\),你需要使用不超过 \(10^4\) 次操作猜出 \(m\),操作类型如下:

  • A x,查询在 \(S\) 中是 \(x\) 的倍数的数的个数。
  • B x,查询在 \(S\) 中是 \(x\) 的倍数的数的个数,并把这些数删去,但是 \(m\) 不会被删去。
  • C x,表示你猜的 \(m=x\)。

\(1\le m\le n\le 10^5\)。

分析

给出一个常数:\(p(10^5)=9592,r(10^5)\approx9700\),\(p(n)\) 指的是 \([1,n]\) 的质数个数,\(r(n)\) 指的是 \([1,n]\) 的质数。

考虑到每个 \(m\) 都可以写成唯一分解的形式 \(\prod_i p_i^{c_i}\),考虑枚举每一个 \(p_i\),使用一次 B 操作删去 \(p_i\) 的所有倍数,然后查询此时 \(p_i\) 倍数个数。若为 \(1\),那么 \(p_i\) 是 \(m\) 的其中一个质因子,暴力枚举每一个 \(p_i^k\) 使用 A 操作就能得到 \(m\) 在这个质因数下的具体指数。

但这样的询问次数是 \(p(n)+r(n)\approx19200>10^4\),不能通过。

考虑优化,一个很经典的套路是对质因子根号分治,设阈值 \(B=\sqrt n\),\(\le B\) 的质因子可以向之前那样暴力计算,而质数幂的数量大概在 \(\dfrac{B}{\ln B}\times \log_{p} n=O(B)\) 量级,次数较小,可以承受。

而 \(m\) 至多有一个 \(>B\) 的质因子,若 \(m\) 不为 \(1\) 或者 \(>B\) 的质数,那么我们只需要对每个质因子使用 A 操作,若 \(m\) 包含某个质因子,那么在对这个质因子使用 A 操作返回的答案是 \(2\),那么只需要 \(p(n)\) 次操作就可以求出答案。

但如果 \(m\) 为 \(1\) 或者 \(>B\) 的质数,无论对那个质因子操作返回的答案都是 \(1\),这种情况下我们只能使用暴力方案求解,次数还是爆炸。

发现对每个质因子都使用 A 操作 check 太浪费了,考虑把多个质因子批量删除之后一起使用 A 操作 check。对质因子分块,设块长 \(C=100\),考虑逐块查询,将块内质因子用 B 操作删掉后查询 A 1,若返回的答案不为 剩余的质因子数+1,那么 \(m\) 落在这个块内,暴力 check 即可。次数为 \(B+p(n)-p(B)+C+\frac{p(n)}{C}\le 10^4\),可以通过。

标签:10,le,质数,查询,CF1406E,因子,Numbers,操作,Deleting
From: https://www.cnblogs.com/dcytrl/p/18452236

相关文章

  • Pyramid Interests PerfectNumber ArmstrongNumbers
    Homework2Note:Submityourwork(uploadthe.javasourcecodefilesONLY,notthecompiled.classfiles!)throughthe“Homework2”linkonBrightspace.Youmaysubmitanunlimitednumberoftimes;wewillonlygradethelast/latestsubmissionattempt,but......
  • [CF1842H]Tenzing and Random Real Numbers
    题面原题传送门题面机翻有\(n\)个介于0和1之间(包括0和1)的均匀随机实变量,记为\(x_1,x_2,\ldots,x_n\)。Tenzing有\(m\)个条件。每个条件的形式为\(x_i+x_j\le1\)或\(x_i+x_j\ge1\)。Tenzing想要知道所有条件都满足的概率,模为\(998~244~353\)。形式上......
  • 题解:CF914C Travelling Salesman and Special Numbers
    题意定义\(\operatorname{popcount}(x)\)为\(x\)二进制下\(1\)的个数。定义对\(x\)的一次操作:\(x\gets\operatorname{popcount}(x)\),显然任意正整数经过若干次操作后会变为\(1\)。给定\(n\)和\(k\),其中\(n\)是在二进制下被给出,求出所有不大于\(n\)且将其变为......
  • 题解:P10922 Happybob's Numbers (UBC001B)
    主要思路:贪心,构造。思路构造题,首先明确要删的就是小于\(n\)的数,因为若删了大于等于\(n\)的数就无法进行之后的操作了。那这道题就简单了,先从大到小排序,遇到小于当前长度\(k\)的数,就将这个数删掉,这时长度需减\(1\),毕竟顺序可以自己调,将下一个小于当前\(k\)的数,放到下一......
  • [CF1447B]Numbers Box
    [CF1447B]NumbersBox题目传送门一道思路十分好想的水题贪心题。题目大意:有\(t\)次提问,每次提问输入两个数\(m,n\)表示行和列,输入\(a_{ij}\)表示第\(i\)行\(j\)列中的数,每次可将两个相邻的数乘\({-1}\)使最终矩阵中所有数相加的和最大。思路:要使矩阵中所有......
  • P6218 [USACO06NOV] Round Numbers S 题解
    题面题目传送门如果一个正整数的二进制表示中,00的数目不小于11的数目,那么它就被称为「圆数」。例如,99的二进制表示为10011001,其中有22个00与22个11。因此,99是一个「圆数」。请你计算,区间[l,r][l,r]中有多少个「圆数」。前置芝士1.数位dp相关的题:P4317花神......
  • D. Another Problem About Dividing Numbers
    原题链接题意有两个数\(a,b\)每次可以拿走其中一个数的若干个质因子,请问恰好\(k\)次操作后能否使\(a=b\)分析假设\(a,b\)最后到达的是\(c\),那么\(\frac{a}{c}\)的质因子个数加上\(\frac{b}{c}\)的质因子个数一定大于等于\(k\)(为什么可以大于?因为一次操作可以多......
  • K11475 丑数[Ugly Numbers,UVa136](set解法)
    题目描述丑数是指不能被2,3,5以外的其他素数整除的数。然后把丑数从小到大排列起来,前11个数如下:1,2,3,4,5,6,8,9,10,12,15,...编写一个程序,计算出第1500个丑数并输出。输入格式无输出格式输出为一行计算出的第1500个丑数替换下面句子中的‘<number>’,再输出。The1500'thuglynum......
  • Codeforces 165E Compatible Numbers 题解
    思路高维前缀和高维前缀和把数的二进制看成一个集合,二进制的每一位为\(1\)为全集\(V\)。根据题目描述,若两数\(a,b\)相容,则\(a\operatorname{and}b=0\),容易发现,\(b\in\complement_{V}a\),所以我们只需要用高维前缀和处理出\(\complement_{V}a\)的一个元素即可。......
  • Collecting Numbers II
    原题链接题解首先,对于数字i如果location[i]<location[i-1]那么遍历次数需要+1,否则不变。因此,对于交换的数字x,y而言,他们只能影响x-1,x+1,y-1,y+1的遍历次数,只需要考虑有限的几种情况即可(需要特判abs(x-y)==1的情况)。code #include<bits/stdc++.h>u......