51NOD5213A 【提高组/高分-省选预科 第一场【M】】序列
小 Y 酷爱的接龙游戏正是这样。玩腻了成语接龙之后,小 Y 决定尝试无平方因子二元合数接龙,规则如下:
现有 \(n\) 个不超过 \(K\) 的合数,每个合数 \(a\) 均可表示为 \(a=pq(p \lt q)\)。
若 \(a=p_1q_1(p_1<q_1),b=p_2q_2(p_2<q_2)\),当且仅当 \(q_1=p_2\) 时 \(b\) 能接在 \(a\) 后面。
请问从给定的这 \(n\) 个数中选数接龙,最长可以形成一个包含多少数的接龙序列?
\(1 \le n \le 50000,1 \le K \le 10^6\)
签到题(可我却签了 \(1\) 个小时的到)
首先,我们可以用线性筛做到 \(O(K\log{K})\) 的时间复杂度内分解 \(2 \sim K\) 的所有满足 \(a=pq\) 的数以及它们的 \(p,q\)。
暴力的做法是我们排序,然后当遍历到了 \(i\),就查找所有 \(j\),使得 \(p_j=q_i\)。然后暴力统计。时间复杂度不会算。
然后发现查找 \(j\) 可以先查找第一个 \(j\) 然后二分做到 \(O(\log n)\)。
然后发现查找 \(j\) 可以预处理做到 \(O(1)\)。
如果你真这么写,也许只有 \(60\) 分。
最后我们发现,暴力时我们搜索了许多重复子问题,而重复子问题可以使用动态规划进行优化,这里直接写的是记忆化搜索。
然后就有了一个 \(100\) 分算法。
#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int VSIZE = 1e6+5,N = 50005;
bool vis[VSIZE];
int prime[VSIZE],tot;
int n;
pair<int,int> cj[VSIZE];
int first[VSIZE];
void sieve(){
for(int i=2;i<=1e6;i++){
if(!vis[i]){
prime[++tot]=i;
}
for(int j=1;j<=tot&&i*prime[j]<=1e6;j++){
vis[i*prime[j]]=1;
if(!(i%prime[j])){
break;
}
}
}
for(int i=1;i<=tot;i++){
for(int j=i;j<=tot&&prime[i]*prime[j]<=1e6;j++){
cj[prime[i]*prime[j]].first=(prime[i]);
cj[prime[i]*prime[j]].second=(prime[j]);
}
}
}
pair<int,int> chai(int x){
return cj[x];
}
pair<int,int> a[N];
int nowt;
vector<pair<int,int> > now;
bool visited[N];
int ans;
int f[N];
int dfs(int i){
visited[i]=1;
if(f[i]){
return f[i];
}
f[i]=1;
int second = a[i].second;
int l = first[second];
if(l>0){
for(int j=l;a[j].first==second;j++){
if(a[j].first!=second){
break;
}
f[i]=max(f[i],dfs(j)+1);
}
}
return f[i];
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
sieve();
cin>>n;
memset(first,-1,sizeof(first));
for(int i=1;i<=n;i++){
int v;
cin>>v;
a[i]=chai(v);
if(a[i].first>a[i].second){
swap(a[i].first,a[i].second);
}
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
if(first[a[i].first]!=-1){
first[a[i].first]=min(first[a[i].first],i);
}
else{
first[a[i].first]=i;
}
}
for(int i=1;i<=n;i++){
if(!visited[i])
dfs(i);
}
cout<<*max_element(f+1,f+n+1)<<'\n';
return 0;
}
51NOD5213A 【提高组/高分-省选预科 第一场【M】】序列的更多相关文章
- 校省选赛第一场A题Cinema题解
今天是学校省选的第一场比赛,0战绩收工,死死啃着A题来做,偏偏一直WA在TES1. 赛后,才发现,原来要freopen("input.txt","r",stdi ...
- 「CSP」第一届提高组考后总结
「CSP」第一届提高组考后总结 问题分析+反思 成绩 心态 考前心态 考时心态 考后心态 方法 心灵鸡汤... 在学习了三年之后,我们信竞迎来了初中最后一次大考,也是第一次 CSPCSPCSP 考试. ...
- 【佛山市选2013】JZOJ2020年8月7日提高组T2 树环转换
[佛山市选2013]JZOJ2020年8月7日提高组T2 树环转换 题目 描述 给定一棵N个节点的树,去掉这棵树的一条边需要消耗值1,为这个图的两个点加上一条边也需要消耗值1.树的节点编号从1开始.在 ...
- 计蒜客 NOIP 提高组模拟竞赛第一试 补记
计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...
- 【佛山市选2013】JZOJ2020年8月7日提高组T3 海明距离
[佛山市选2013]JZOJ2020年8月7日提高组T3 海明距离 题目 描述 对于二进制串a,b,他们之间的海明距离是指两个串异或之后串中1的个数.异或的规则为: 0 XOR 0 = 0 1 XOR ...
- 【佛山市选2013】JZOJ2020年8月7日提高组T1 回文子序列
[佛山市选2013]JZOJ2020年8月7日提高组T1 回文子序列 题目 描述 回文序列是指左右对称的序列.例如1 2 3 2 1是回文序列,但是1 2 3 2 2就不是.我们会给定一个N×M的矩阵 ...
- 比赛总结——牛客网 NOIP赛前集训营提高组模拟第一场
第一场打的很惨淡啊 t1二分+前缀最小值没想出来,20分的暴力也挂了,只有10分 t2数位dp,调了半天,结果因为忘了判0的特殊情况WA了一个点,亏死 t3emmmm.. 不会 imone说是DSU ...
- [NOIP2012] 提高组 洛谷P1081 开车旅行
题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...
- NOIP2014提高组 酱油记
NOIP考到哪里我就写到哪里好了. 2014/10/12 初赛 下午两点半开始考,我两点就到了.然后看到了QYL,NYZ,CZR等大神,先Orz了再说. 考试开始前,发现考场竟然没几个我认识的,不是按 ...
- NOIP2011提高组 聪明的质监员 -SilverN
题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[L ...
随机推荐
- JUI(6)线程池
文章目录 1.SynchronousQueue 2.线程池(重点) 2.1 使用单例 2.2.使用固定大小的线程 2.3.缓存线程池 2.4 七大参数 1.SynchronousQueue packa ...
- 8_vue是如何进行数据代理的
在了解了关于js当中的Object.defineProperty()这个方法后,我们继续对vue当中的数据代理做一个基于现在的解析 建议观看之前先了解下js当中的Obejct.defineProper ...
- Python3.11正式版,它来了!
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/b055fbf2.html 你好,我是测试蔡坨坨. 就在前几天,2022年10月24日,Python3.11正式版发布了! P ...
- Java多线程(6):锁与AQS(下)
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 之前说过,AQS(抽象队列同步器)是Java锁机制的底层实现.既然它这么优秀,是骡子是马,就拉出来溜溜吧. 首先用重入锁来实现简单的累加,就像这 ...
- day12-Servlet02
Servlet02 6.GET和POST请求的分发处理 开发Servlet,通常编写doGet,doPost方法.来对表单的get和post请求进行分发处理 例子 在web文件夹下面创建一个html页 ...
- 试试将.NET7编译为WASM并在Docker上运行
之前有听到说Docker支持Wasmtime了,刚好.NET7也支持WASM,就带大家来了解一下这个东西,顺便试试它怎么样. 因为WASM(WebAssembly) 一开始是一个给浏览器的技术,比起J ...
- Windows骚操作
电脑常用的快捷键 键盘功能健:Tab.Shift.Ctrl.Alt.Windows.Enter.空格.上下左右健.CapsLock(大小写转换).NumLock(对小键盘控制开/关) 键盘快捷键:全选 ...
- 【题解】CF1215C Swap Letters
题面传送门 解决思路 首先容易得知,两个字符串中 \(b\)(或 \(a\)) 的个数为偶数时,一定有解.为奇数则一定无解. 其次考虑怎么交换.对照样例三: in: 8 babbaabb ababab ...
- Dubbo-时间轮设计
前言 Dubbo源码阅读分享系列文章,欢迎大家关注点赞 SPI实现部分 Dubbo-SPI机制 Dubbo-Adaptive实现原理 Dubbo-Activate实现原理 Dubbo SPI-Wrap ...
- SPPS完整版下载安装教程【博主亲测】
SPSS全称Statistical Product and Service Solutions,是一款优秀的数据分析软件,旨在为用户提供专业的统计产品与服务解决方案.SPSS面向行业应用人员所设,被广 ...