UVa10653.Prince and Princess
题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1576
| 13935381 | 10635 | Prince and Princess | Accepted | C++ | 0.095 | 2014-07-24 03:41:18 |
Prince and Princess
Input: Standard Input
Output: Standard Output
Time Limit: 3 Seconds
In an n x n chessboard, Prince and Princess plays a game. The squares in the chessboard are numbered 1, 2, 3 ... n*n, as shown below:
Prince stands in square 1, make p jumps and finally reach square n*n. He enters a square at most once. So if we use xp to denote the p-th square he enters, then x1, x2, ... xp+1 are all different. Note that x1 = 1 and xp+1 = n*n. Princess does the similar thing - stands in square 1, make q jumps and finally reach square n*n. We use y1, y2 , ... yq+1 to denote the sequence, and all q+1 numbers are different.
Figure 2 belows show a 3x3 square, a possible route for Prince and a different route for Princess.
The Prince moves along the sequence: 1 --> 7 --> 5 --> 4 --> 8 --> 3 --> 9 (Black arrows), while the Princess moves along this sequence: 1 --> 4 --> 3 --> 5 --> 6 --> 2 --> 8 --> 9 (White arrow).
The King -- their father, has just come. "Why move separately? You are brother and sister!" said the King, "Ignore some jumps and make sure that you're always together."
For example, if the Prince ignores his 2nd, 3rd, 6th jump, he'll follow the route: 1 --> 4 --> 8 --> 9. If the Princess ignores her 3rd, 4th, 5th, 6th jump, she'll follow the same route: 1 --> 4 --> 8 --> 9, (The common route is shown in figure 3) thus satisfies the King, shown above. The King wants to know the longest route they can move together, could you tell him?
Input
The first line of the input contains a single integer t(1 <= t <= 10), the number of test cases followed. For each case, the first line contains three integers n, p, q(2 <= n <= 250, 1 <= p, q < n*n). The second line contains p+1 different integers in the range [1..n*n], the sequence of the Prince. The third line contains q+1 different integers in the range [1..n*n], the sequence of the Princess.
Output
For each test case, print the case number and the length of longest route. Look at the output for sample input for details.
Sample Input Output for Sample Input
|
1 3 6 7 1 7 5 4 8 3 9 1 4 3 5 6 2 8 9 |
Case 1: 4 |
解题思路:由于跪在校赛的LCS nlogn算法,所以回来恶补,特意找了一道相同意思的题目。如同此题,简单的LCS类型,但是10^5左右的数据量,如果开滚动dp的话,复杂度O(n^2)会超时。所以应该将LCS问题转化成下标对应的LIS问题,然后再使用LIS的nlogn算法,具体思想是维护一个递增序列,二分找上界,替换元素即可。(感谢DIM神给我讲解此算法)。这样已经足够了。但是说句与此题无关的话,如果数据范围过大,例如到64位级别的数字时,可以使用离散化,继续降低复杂度。膜拜下yeahpeng酱。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <algorithm>
#include <numeric>
#include <map>
#include <vector>
using namespace std; const int N = * ;
map<int, int> check;
vector<int> Stack; int main () {
int T, n, p, q, cur = ;
int s1[N], s2[N];
scanf("%d", &T);
while (T --) {
Stack.clear();
check.clear();
scanf("%d%d%d", &n, &p, &q);
for (int i = ; i <= p; ++ i) {
scanf("%d", &s1[i]);
check[s1[i] ] = i + ;
} map<int, int> :: iterator it; for (int i = ; i <= q; ++ i) {
scanf("%d", &s2[i]);
if (check.find(s2[i]) != check.end()) {
s2[i] = check[s2[i]];
} else {
s2[i] = ;
}
}
/*
for (int i = 0 ; i <= p; ++ i) {
cout << check[s1[i] ] << " ";
}
cout << endl;
*//*
for (int i = 0 ; i <= q; ++ i) {
cout << s2[i] << " ";
}
cout << endl;
*/
for (int i = ; i <= q; ++ i) {
if (Stack.empty() || s2[i] > Stack[Stack.size() - ]) {
Stack.push_back(s2[i]);
} else {
vector<int> :: iterator it = lower_bound(Stack.begin(), Stack.end(), s2[i]);
*it = s2[i];
}
}
/*for (int i = 0; i < Stack.size(); ++ i ) {
cout << Stack[i] << " ";
}
cout << endl;*/
printf("Case %d: ", ++ cur);
cout << Stack.size() << endl; }
return ;
}
UVa10653.Prince and Princess的更多相关文章
- 强连通+二分匹配(hdu4685 Prince and Princess)
Prince and Princess Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Othe ...
- 10635 - Prince and Princess
Problem D Prince and Princess Input: Standard Input Output: Standard Output Time Limit: 3 Seconds In ...
- uva 10635 - Prince and Princess(LCS)
题目连接:10635 - Prince and Princess 题目大意:给出n, m, k,求两个长度分别为m + 1 和 k + 1且由1~n * n组成的序列的最长公共子序列长的. 解题思路: ...
- Prince and Princess HDU - 4685(匹配 + 强连通)
Prince and Princess Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Othe ...
- UVA - 10635 Prince and Princess LCS转LIS
题目链接: http://bak.vjudge.net/problem/UVA-10635 Prince and Princess Time Limit: 3000MS 题意 给你两个数组,求他们的最 ...
- HDU 4685 Prince and Princess 二分图匹配+tarjan
Prince and Princess 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4685 Description There are n pri ...
- HDU 4685 Prince and Princess (2013多校8 1010题 二分匹配+强连通)
Prince and Princess Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Othe ...
- HDU4685:Prince and Princess(二分图匹配+tarjan)
Prince and Princess Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Othe ...
- Prince and princess——需要优化的DP
一个时间效率为o(nlogn)的算法求公共子序列的应用 Prince and princess 题目大意(已翻译 ) 在nxn的棋盘上,王子和公主玩游戏.棋盘上的正方形编号为1.2.3 ... n * ...
随机推荐
- Maven--多模块依赖实例解析(五)
<Maven--搭建开发环境(一)> <Maven--构建企业级仓库(二)> <Maven—几个需要补充的问题(三)> <Maven—生命周期和插件(四)&g ...
- PHP中文汉字验证码
hb.ttf换成随便你自己下载的ttf Header("Content-type: image/PNG"); $str="的一是在了不和有大这主中人上为们地个用工时要动国 ...
- 用java流方式判断文件类型
这个方法只能在有限的范围内有效.并不是万金油 比如 图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是2进制且专业性很强的文件类型判断. 下面给出完整版代码 首先是文件类型枚取 packag ...
- css中的列表样式
在网页设计中,我们经常将某些具有相似功能的标签放在同一组中,这时我们经常会用到列表标签(无序列表ul,有序列表ol),在列表标签中对列表样式的设计可以使我们的页面得到一定程度的美化. 在css中对列表 ...
- swing入门例子
// a simple exmple that can show the basis of swing------------------------------------------------- ...
- 在cygwin下编译c语言
#include <stdio.h> int main (void) { printf("Hello World!\n"); ; } 1.保存到cygwin工作目录下 ...
- android 隔几秒再执行
今天做项目,需要前面的方法执行完等待2秒在关闭当前页面.之前使用的是Thread.sleep(2000)发现根本没有作用.经过多次尝试,发现需要使用以下方法才能实现: new Thread(){ pu ...
- VC防止程序被多次运行 互斥体方法
BOOL CXXXApp::InitInstance() //函数内添加代码 HANDLE hMutex=CreateMutex(NULL,TRUE,"test"); // 用于检 ...
- C# 如何获取错误所在行数
两种方法,一种是利用error.StackTrace,另外一种是try-catch找到错误行数,具体如下: 一.error.StackTrace代码 int i = ex.StackTrace.Ind ...
- JS控制文本框textarea输入字数限制的方法
<html> <head runat="server"> <title></title> <script type=" ...