2021CCPC网络赛 1012 Remove

题意

给定 \(n, m\),然后再给 \(m\) 个素数,问对于所有 \(i \in [1,n]\),将 \(i\) 操作至 \(0\) 的最小操作数。每次操作允许将当前的 \(i\) 减小至 \(i \bmod{p}\),\(p\) 为给定素数里的一个。

题解

设对于 \(i\),将其操作至 \(0\) 的操作数为 \(ans_i\),最大的素数为 \(pmx\)。我们可以得到以下三个结论:

  1. \(i < pmx\),我们都可以让 \(i\) 减去 \(i \bmod{p}\) 使其变为 \(0\) ,故 \(ans_i=1\) .

  2. 记 \(R = \prod_{j=1}^m p_j\) 。对于 \(i \ge R\) ,我们无论模哪个素数,最终一定会到达 \(R\),而这个数无论模哪个数都是 \(0\) ,最终一定到不了 \(0\) ,故 \(ans_i = 0\).

  3. 考虑中间的数,很容易想到 \(ans\) 应该是非严格单调递增的,赛时可以直接作为结论,也可以用数学归纳法稍微证明一下:

  • 我们只考虑 \([1,\min(n,R-1)]\) 中的数。
  • 对于 \(\forall i \in[1,pmx),ans_i=1\) 。
  • 对于 \(i\in [pmx,R]\),假设对于 \(k \in [pmx,R), ans[1...k]\)非严格单调递增。
  • 对于 \(ans_{k+1}\) ,我们需要证明 \(ans_{k+1}\ge ans_k\) 。考虑一下转移的过程:对于给定素数里的一个素数 \(p\) 的倍数 \(x\) ,能转移到 \(x\) 的数的范围是 \([x+1,x+p-1]\) ,要使这个范围尽可能的大,\(p\) 就得是 \(x\) 的最大素因子。也就是说,存在一个 \(p_1\) 的倍数 \(x_1\), 且 \(p_1\) 是 \(x_1\) 的最大素因子,使得 \(k\in [x_1+1,x_1+p_1-1]\) 。若 \(k+1\in[x_1+1,x_1+p_1-1]\) ,则 \(ans_{k+1}=ans_k\) ,\(ans_{k+1}\ge ans_k\) 成立。若 \(k+1=x_1+p_1\) ,\(x_1+p_1\) 的最大素因子必定不会超过 \(p_1\) ,因为两个素数的间隔肯定大于等于 \(1\) 。也就是说,\(ans_{k+1}\) 会转移到 \(ans_{k+1-d}\) ,这个 \(d\) 不会超过 \(p_1\) ,所以 \(k+1-d\in [x_1+1,x_1+p_1-1]\) ,可以得到 \(ans_{k+1}=ans_{k+1-d}+1=ans_k+1\),\(ans_{k+1}\ge ans_k\) 成立。
  • 综上,\(\forall i\in[1,R)\) ,都有 \(ans[1...i]\) 非严格单调递增成立。

有了非严格单调递增的结论,就可以考虑贪心找答案。考虑在这区间内的一个数 \(x\) ,在给定素数里有一个 \(p\) 满足 \(x\bmod{p}\) 最大, 则 \([x+1,x-1+x\bmod{p}]\) 中的数转移至 \(x\) 时最优。找这个 \(p\) 可以暴力找,以下是复杂度的证明:

每次暴力找 \(p\) 的时间复杂度为 \(O(|P|)\) 。我们需要计算从 \(L=pmx-1\) 跳到 \(M=\min(n,R)\) 需要多少步(这里取 \(\min\) 是因为结论2)。考虑素因子的贡献 \(f_i\) ,结合结论3的证明过程,设 \(p_i\) 为在给定质数中第 \(i\) 大的质数,\(f_1=M/p_1-L/p_1\) ,对于 \(i>1\) ,\(f_i=M/p_i-L/p_i-\sum_{j<i}f_j\) 。忽略 \(L\) 的话,\(\sum f\) 可以简化为 \(M/p_m-M\times \sum_{i=1}^n(i-1)/p_i\) 。具体的复杂度不好算(懒得写了),最终的复杂度大概实在\(O(|P|\log n)\)。

本人蒟蒻,若证明过程有任何错误,欢迎评论指正_

另外,模 \(2^{64}\) 让 unsigned long long自然溢出就行了。

AC代码

#include <bits/stdc++.h>

#define IO ios::sync_with_stdio(NULL)
#define scl(z) scanf("%lld", &(z))
#define sc(z) scanf("%d", &(z))
#define _ff(i, a, b) for(int i = a; i <= b; ++i)
#define _rr(i, a, b) for(int i = b; i >= a; --i)
#define _f(i, a, b) for(int i = a; i < b; ++i)
#define _r(i, a, b) for(int i = b - 1; i >= a; --i)
#define mkp make_pair
#define endl "\n"
#define pii pair<int,int>
#define fi first
#define se second
#define lowbit(x) x&(-x)
#define pb push_back using namespace std;
typedef double db;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull; const int N = 2e6 + 5;
const ll M = 1e5 + 5;
const ll mod = 1e9+7;
const int inf = 1e9;
const double eps = 1e-9;
const double PI = acos(-1.0);
const pii NIL = {0,0}; int p[M], pm[N];
ull ans[N]; void solve() {
int n, m; sc(n), sc(m);
_ff(i, 1, n) pm[i] = ans[i] = 0;
int pmx = 1;
_ff(i, 1, m) {
sc(p[i]);
pmx = max(pmx, p[i]);
}
_f(i, 1, min(n + 1, pmx)) ans[i] = 1;
for (int i = pmx - 1; i <= n;) {
int r = 0;
_ff(j, 1, m) r = max(i / p[j] * p[j] + p[j] - 1, r);
_ff(j, i + 1, r) ans[j] = ans[i] + 1;
if (i == r) break;
i = r;
}
ull res=0,x=1;
_rr(i,1,n)res+=ans[i]*x,x*=(ull)23333;
printf("%llu\n", res);
} int main() {
// IO;
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif // !ONLINE_JUDGE ll T; scl(T);
_f(i,0,T) {
// cout<<"Case "<<i+1<<": ";
solve();
} // solve(); return 0;
}

CCPC2021网络赛 1012 Remove的更多相关文章

  1. HDU 4739 Zhuge Liang's Mines (2013杭州网络赛1002题)

    Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  2. HDU 5875 Function -2016 ICPC 大连赛区网络赛

    题目链接 网络赛的水实在太深,这场居然没出线zzz,差了一点点,看到这道题的的时候就剩半个小时了.上面是官方的题意题解,打完了才知道暴力就可以过,暴力我们当时是想出来了的,如果稍稍再优化一下估计就过了 ...

  3. 大连网络赛 1006 Football Games

    //大连网络赛 1006 // 吐槽:数据比较水.下面代码可以AC // 但是正解好像是:排序后,前i项的和大于等于i*(i-1) #include <bits/stdc++.h> usi ...

  4. 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree

    // 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree // 题意:n个点的树,每个节点有权值为正,只能用一次,每条边有负权,可以 ...

  5. (四面体)CCPC网络赛 HDU5839 Special Tetrahedron

    CCPC网络赛 HDU5839 Special Tetrahedron 题意:n个点,选四个出来组成四面体,要符合四面体至少四条边相等,若四条边相等则剩下两条边不相邻,求个数 思路:枚举四面体上一条线 ...

  6. HDU-4041-Eliminate Witches! (11年北京网络赛!!)

    Eliminate Witches! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  7. hihocoder1236(北京网络赛J):scores 分块+bitset

    北京网络赛的题- -.当时没思路,听大神们说是分块+bitset,想了一下发现确实可做,就试了一下,T了好多次终于过了 题意: 初始有n个人,每个人有五种能力值,现在有q个查询,每次查询给五个数代表查 ...

  8. 36th成都区域赛网络赛 hdoj4039 The Social Network(建图+字符串处理)

    这题是某年成都区域赛网络赛的一题. 这题思路非常easy,可是从时间上考虑,不妨不要用矩阵存储,我用的链式前向星. 採用线上查询.利用map对字符串编号,由于非常方便.要推荐的朋友,事实上就是朋友的朋 ...

  9. hdu5017:补题系列之西安网络赛1011

    补题系列之西安网络赛1011 题目大意:给定一个椭球: 求它到原点的最短距离. 思路: 对于一个椭球的标准方程 x^2/a^2 + y^2/b^2 +z^2/c^2=1 来说,它到原点的最短距离即为m ...

  10. HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)

    HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...

随机推荐

  1. Mac上好用的app们

    记录下自己在mac上用的一些很不错的app,大多免费. 排名随缘. 不定期更新. Amphetamine 来源 AppStore 说明 欢迎使用Amphetamine,一款为macOS打造的最棒的防睡 ...

  2. React 使用链表遍历组件树

    React 为在有限的资源情况下,更好地控制UI的更新,提出了时间分片的概念.以达到三个目标: performing non-blocking rendering(无阻塞渲染):applying up ...

  3. C#连Mysql数据库报错 SSL Connection error

    MySql.Data.MySqlClient.MySqlException (0x80004005): SSL Connection error. ---> System.AggregateEx ...

  4. WCF学习系列---1、新建第一个WCF服务

    一.了解.Net平台下的分布式技术 1.WebService:基于Http协议的Soap模式 2.Remoting :也是一种分布式架构技术,常常用于TCP模式的二进制传输 3.MSMQ:这是一种分布 ...

  5. .NET Core基础:白话管道中间件

    在Asp.Net Core中,管道往往伴随着请求一起出现.客户端发起Http请求,服务端去响应这个请求,之间的过程都在管道内进行. 举一个生活中比较常见的例子:旅游景区. 我们都知道,有些景区大门离景 ...

  6. element ui中el-tree文字显示不全解决方案

    // 问题描述 // 在项目中使用element-ui前端框架来开发界面时,使用el-tree组件实现树形菜单,遇到当节点文字过长会出现显示不全的问题 <el-tree ref="tr ...

  7. CoreText学习笔记

    CoreText是Apple系统的文字渲染引擎. 我们先看一个字符的字形图,了解一下一个字形包含的部分: 它的坐标系为窗口的左下角为视图的原点(跟Mac系统一样的坐标系),而iOS系统的坐标系为窗口的 ...

  8. Django初识(一)

    一.Django简介 Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的设计模式,即模型M,视图V和模版T 1.框架介绍 具体介绍Django之前,必须先介绍Web框架的 ...

  9. 【Pr】如何将音频剪成多段批量导出

    如何将音频剪成多段批量导出 需要软件: Pr, Adobe Media Encoder (时间线窗口中) 用剃刀将音频割成多段 (时间线窗口中) 选中音频右键 | 嵌套 | 输入名字 (嵌套快捷键:A ...

  10. absible笔记第一章 (ansibles基础与playbook常用模块)

    一. ansibles基础与playbook 1.优先级问题 ANSIBLE_CONFIG                        ansible.cfg 项目目录                ...