图片加载可能有点慢,请跳过题面先看题解,谢谢

这道题。。。
还是要点思维的。。。
第一眼看是个最长公共子序列,但是, \(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相关推荐

  1. UVA 10635——Prince and Princess

    题意:给定两个长度为p+1和q+1的序列,求两个序列的LCS. 思路:如果直接使用朴素的LCS算法则O(pq)会超时,可以把A中出现的元素编码,然后映射到B(只保留AB都存在的元素),这样就转化为求B ...

  2. uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))

    标题效果:有两个长度p+1和q+1该序列.的各种元素的每个序列不是相互同.并1~n^2之间的整数.个序列的第一个元素均为1. 求出A和B的最长公共子序列长度. 分析:本题是LCS问题,可是p*q< ...

  3. UVA 10635 Prince and Princess

    题意: 求两数字串的最长公共子序列(LCS). 思路: LCS的时间复杂度为O(nn),因为数据量大,所以会超时. 又因为数字串互不相同,所以可以LCS转LIS(最长上升子序列),LIS有时间复杂度O ...

  4. UVA 10635 王子和公主

    UVA 10635 [题目描述]:王子和公主 一个王子和公主在n*n的格子中行走,这些格子是有1....n^2的编号的.现在给定p+1个数,再给定q+1个数,公主和王子可以选择其中某些格子行走,求他们 ...

  5. HDU 4685 Prince and Princess(二分匹配加点建图+强连通分量)

    题目链接 Problem Description There are n princes and m princesses. Princess can marry any prince. But pr ...

  6. HDU4685:Prince and Princess(二分图匹配+tarjan)

    Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  7. H - Prince and Princess 计蒜客 - 42402

    H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...

  8. uva10635 Prince and Princess LCS 变 lIS

    // uva10635 Prince and Princess LCS 变 lIS // 本意求LCS,但是规模有60000多,复杂度肯定不够 // 注意如果俩个序列的值的范围相同,那么可以在一个 / ...

  9. Prince and Princess问题解决

    摘要 这是突然看到的一个非常有意思的题,是ACM-ICPC的原题,在这里稍微做一些分析,希望对大家有帮助. Prince and Princess 题面 王子m和公主Hff相爱,想要娶公主.虽然公主非 ...

最新文章

  1. 使用wget在linux服务器上下载oracle软件
  2. 《网络攻防实践》第七周作业
  3. 技术宝典 | WebRTC 技术解析之 Android VDM
  4. 跟着“土牛”学架构知识
  5. .NET Core 3.0 中的数据库驱动框架 System.Data
  6. FaunaDB and serverless and bmob
  7. java post raw_Java raw 请求和获取
  8. 指利用计算机技术实现对文本篇章的理解,行业发展|人工智能的自然语言处理技术已经到了这一步...
  9. SQL函数字符串分拆
  10. 开源GIS(八)——开源GIS简史
  11. DAY16-T1342面试题 05.08 -2022-01-31-非自己作答
  12. Hadoop:INFO mapreduce.Job: Running job
  13. plt.xticks()
  14. 【图片新闻】低空穿越的美军MC-130J突击队II特种作战运输机
  15. 程序员的发展之路一(转)
  16. 【moment.js】时间格式化插件
  17. html微信网页字体被放大问题
  18. python彩色蟒蛇绘制方向_Python绘制彩色蟒蛇
  19. Oracle number 类型转换为 varchar2
  20. CPU性能测试脸型软件,UserBenchmark(电脑性能测试软件) V2.9.1.0 官方版

热门文章

  1. linux slub分配器,Vi Linux内存 之 Slub分配器(六)
  2. flux和redux
  3. Bacteria(优先队列)
  4. Python进程池之pool.map()函数传入多参数
  5. 小程序微信小程序设计登录页面
  6. OpenResty实现限流的几种方式
  7. spring Boot Configuration Annotation Processor not fount in classpath
  8. 代谢组学资讯,全球爆火的ChatGPT,是如何看待三阴性乳腺癌的?
  9. mysql建表日期类型
  10. NCBI:美国国立生物技术信息中心大型数据库