[UVA 10635] Prince ans Princess
图片加载可能有点慢,请跳过题面先看题解,谢谢
这道题。。。
还是要点思维的。。。
第一眼看是个最长公共子序列,但是, \(N\le 62500\) ,并不能 \(O(n^2)\) 求
$
$
这道题有个很好的性质,每个序列中的元素互不相同
也就是说,在一个序列中,每一个数字都有一个唯一的位置
这有什么用?
$
$
我们进行这样一个操作,把 \(b\) 序列中的数字换成该数字在 \(a\) 序列中出现的位置,那么问题就变成了一个求 \(b\) 序列的 \(LCS\) 的问题了
这样我们就可以在 \(O(nlogn)\) 的复杂度下解决这个问题
再吐槽一下。。。
做这道题目,思考 \(10min\) ,代码调试 \(2h\) ,震惊,原因竟是?
看下这个语句:
我写的: \(a[++k]=max(a[k],x)\)
AC程序: \(a[k+1]=max(a[k+1],x)\),或者 \(a[k]=max(a[++k],x)\)
//made by Hero_of_Someone
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define il inline
#define RG register
using namespace std;
il int gi(){ RG int x=0,q=1; RG char ch=getchar(); while( ( ch<'0' || ch>'9' ) && ch!='-' ) ch=getchar();if( ch=='-' ) q=-1,ch=getchar(); while(ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x; }int T,t,N,n,m,cnt;
int a[100010],b[100010],id[100010];il void init(){N=gi(),n=gi()+1,m=gi()+1;memset(id,0,sizeof(id)); cnt=0;for(RG int i=1;i<=n;i++) a[i]=gi(),id[a[i]]=i;for(RG int i=1;i<=m;i++){ b[i]=gi();if(id[b[i]]) b[++cnt]=id[b[i]];}
}il void work(){n=cnt,cnt=0;memset(a,0x3f3f3f3f,sizeof(a));for(RG int i=1;i<=n;i++){RG int x=b[i];RG int l=1,r=cnt,k=0;while(l<=r){RG int mid=(l+r)>>1;if(a[mid]>x) r=mid-1;else l=mid+1,k=mid;}if(k==cnt) a[++cnt]=x;else a[k]=min(a[++k],x);}printf("Case %d: %d\n",t,cnt);
}int main(){ T=gi(); for(t=1;t<=T;t++){ init(); work(); } return 0; }
转载于:https://www.cnblogs.com/Hero-of-someone/p/7654585.html
[UVA 10635] Prince ans Princess相关推荐
- UVA 10635——Prince and Princess
题意:给定两个长度为p+1和q+1的序列,求两个序列的LCS. 思路:如果直接使用朴素的LCS算法则O(pq)会超时,可以把A中出现的元素编码,然后映射到B(只保留AB都存在的元素),这样就转化为求B ...
- uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))
标题效果:有两个长度p+1和q+1该序列.的各种元素的每个序列不是相互同.并1~n^2之间的整数.个序列的第一个元素均为1. 求出A和B的最长公共子序列长度. 分析:本题是LCS问题,可是p*q< ...
- UVA 10635 Prince and Princess
题意: 求两数字串的最长公共子序列(LCS). 思路: LCS的时间复杂度为O(nn),因为数据量大,所以会超时. 又因为数字串互不相同,所以可以LCS转LIS(最长上升子序列),LIS有时间复杂度O ...
- UVA 10635 王子和公主
UVA 10635 [题目描述]:王子和公主 一个王子和公主在n*n的格子中行走,这些格子是有1....n^2的编号的.现在给定p+1个数,再给定q+1个数,公主和王子可以选择其中某些格子行走,求他们 ...
- HDU 4685 Prince and Princess(二分匹配加点建图+强连通分量)
题目链接 Problem Description There are n princes and m princesses. Princess can marry any prince. But pr ...
- HDU4685:Prince and Princess(二分图匹配+tarjan)
Prince and Princess Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Othe ...
- H - Prince and Princess 计蒜客 - 42402
H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...
- uva10635 Prince and Princess LCS 变 lIS
// uva10635 Prince and Princess LCS 变 lIS // 本意求LCS,但是规模有60000多,复杂度肯定不够 // 注意如果俩个序列的值的范围相同,那么可以在一个 / ...
- Prince and Princess问题解决
摘要 这是突然看到的一个非常有意思的题,是ACM-ICPC的原题,在这里稍微做一些分析,希望对大家有帮助. Prince and Princess 题面 王子m和公主Hff相爱,想要娶公主.虽然公主非 ...
最新文章
- 使用wget在linux服务器上下载oracle软件
- 《网络攻防实践》第七周作业
- 技术宝典 | WebRTC 技术解析之 Android VDM
- 跟着“土牛”学架构知识
- .NET Core 3.0 中的数据库驱动框架 System.Data
- FaunaDB and serverless and bmob
- java post raw_Java raw 请求和获取
- 指利用计算机技术实现对文本篇章的理解,行业发展|人工智能的自然语言处理技术已经到了这一步...
- SQL函数字符串分拆
- 开源GIS(八)——开源GIS简史
- DAY16-T1342面试题 05.08 -2022-01-31-非自己作答
- Hadoop:INFO mapreduce.Job: Running job
- plt.xticks()
- 【图片新闻】低空穿越的美军MC-130J突击队II特种作战运输机
- 程序员的发展之路一(转)
- 【moment.js】时间格式化插件
- html微信网页字体被放大问题
- python彩色蟒蛇绘制方向_Python绘制彩色蟒蛇
- Oracle number 类型转换为 varchar2
- CPU性能测试脸型软件,UserBenchmark(电脑性能测试软件) V2.9.1.0 官方版