hdu 6076 Security Check
题
OvO http://acm.hdu.edu.cn/showproblem.php?pid=6076
2017 Multi-University Training Contest - Team 4 - 1010
解
O(n2)的DP的话,
第二种情况,dp[i][j]=max(max(dp[i][j-1],dp[i-1][j])+1,dp[i-1][j-1]+1),这种情况下dp[i][j]是必然取dp[i-1][j-1]+1的,
这样对于dp[n][n]就可以类似贪心地处理,每次搜索碰到第二种情况优先取第二种情况,否则就取第一种的最大值。
而在第一种状况下,因为k很小,所以要搜索的状态其实是很少的。
对于第二种状况,拿一个向量记录每条对角线上不符合状况二的情况,这样每次搜到第二种情况都可以跳跃着搜索,(在起跳点所在的这条对角线的向量上,对跳跃的落脚点进行二分)。
这样总的情况其实是很少的,可以加一个记忆化
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <map>
#include <vector> using namespace std; typedef long long ll; const int M=6e4+44;
const int bas=M-22; int n,k;
int A[M],B[M],plcb[M];
map<int,map<int,int> > mp; //saves for case 1,case 2
vector<int> dia[M*2]; //diagonals saves void init()
{
mp.clear();
int i,j,valb,pb;
for(i=1-n;i<=n-1;i++)
dia[i+bas].clear();
for(i=1;i<=n;i++)
for(j=0;j<=k;j++)
{
valb=A[i]-j;
if(valb>0)
{
pb=plcb[valb];
dia[i-pb+bas].push_back(i);
}
valb=A[i]+j;
if(valb<=n)
{
pb=plcb[valb];
dia[i-pb+bas].push_back(i);
}
}
for(i=1-n;i<=n-1;i++)
sort(dia[i+bas].begin(),dia[i+bas].end());
} int deal(int wh,int now)
{
int i,j,li,ri,mid;
if(dia[wh].size()==0 || dia[wh][0]>now)
return now-min(now,now-(wh-bas));
li=0; ri=dia[wh].size();
while(li<ri-1)
{
mid=(li+ri)>>1;
if(dia[wh][mid]<now)
li=mid;
else
ri=mid;
}
return dia[wh][li];
} int dfs(int x,int y)
{
int i,j,tmp,ret,val1,val2;
if(x==0 || y==0)
return x+y;
if(abs(A[x]-B[y])<=k)
{
val1=mp[x-1][y];
if(val1==0) val1=dfs(x-1,y);
val2=mp[x][y-1];
if(val2==0) val2=dfs(x,y-1);
ret=1+min(val1,val2);
mp[x][y]=ret;
return ret;
}
else
{
tmp=x-deal(x-y+bas,x);
ret=tmp+dfs(x-tmp,y-tmp);
mp[x][y]=ret;
return ret;
}
} int main()
{
// freopen("数据\\1010.in","r",stdin);
// freopen("数据\\fxxl1010.out","w",stdout);
int i,j;
int cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
scanf("%d",&A[i]);
for(i=1;i<=n;i++)
{
scanf("%d",&B[i]);
plcb[B[i]]=i;
}
init();
int ans=dfs(n,n);
printf("%d\n",ans);
}
return 0;
}
hdu 6076 Security Check的更多相关文章
- HDU 6076 - Security Check | 2017 Multi-University Training Contest 4
/* HDU 6076 - Security Check [ DP,二分 ] | 2017 Multi-University Training Contest 4 题意: 给出两个检票序列 A[N], ...
- HDU 6076 Security Check DP递推优化
Security Check Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- 2016多校第4场 HDU 6076 Security Check DP,思维
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6076 题意:现要检查两条队伍,有两种方式,一种是从两条队伍中任选一条检查一个人,第二种是在每条队伍中同 ...
- HDU 6076 (动态规划)
HDU 6076 Security Check Problem : 有两个长度为n的队列过安检,每个人有一个特征值.如果两个队列中的第一个人的特征值之差小于等于k,那么一次只能检查其中一个人,否则一次 ...
- hdu6076 Security Check 分类dp 思维
/** 题目:hdu6076 Security Check 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6076 题意:有两个队列在排队,每一次警察可以检 ...
- 2017 多校4 Security Check
2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...
- Windows Directory ACL Security Check By ACL Baseline
catalog . Windows NTFS ACL(MAC) Permission . How the System Uses ACLs . 服务器不安全ACL配置带来的攻击向量 . NTFS AC ...
- HDU 2888:Check Corners(二维RMQ)
http://acm.hdu.edu.cn/showproblem.php?pid=2888 题意:给出一个n*m的矩阵,还有q个询问,对于每个询问有一对(x1,y1)和(x2,y2),求这个子矩阵中 ...
- Windows Registry Security Check
catalog . Windows注册表 . Windows注册表包含的攻击向量 . 注册表安全配置基线标定 1. Windows注册表 注册表(Registry,繁体中文版Windows称之为登录档 ...
随机推荐
- plsql软件使用手册
记录登陆密码及用户名
- JS中的迭代
for each...in 使用一个变量迭代一个对象的所有属性值.对于每一个属性值,有一个指定的语句块被执行. 作为ECMA-357(E4X)标准的一部分,for each...in语句已被废弃,E4 ...
- vue中关于checkbox数据绑定v-model指令说明
vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: <div id='myApp'> <input type="c ...
- Python基础『二』
目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...
- C - 简易贪吃蛇的编写
不多废话,直接进入正题——用C编写简易贪吃蛇.附上拙劣的源码 * c-snake * 首先说明使画面动起来的原理:通过 system("cls"); 清除当前控制台的显示,再pri ...
- Fonour.AspnetCore 生成SQL SERVER数据库
Install-Package EntityFramework Add-Migration InitialCreate Update-Database
- LeetCode 腾讯精选50题--有效的括号
根据题意,第一反应就是使用栈,左右括号相匹配,则将左括号出栈,否则将左括号入栈. 这里我用数组配合“指针”模拟栈的入栈与出栈操作,初始时指针位置指向0,表示空栈,凡遇上左括号则直接入栈,若遇上有括号, ...
- CentOS7安装Docker-CE并部署项目
前言 这是我第一次使用dokcer部署项目,现学现卖.成功之后把所有用到的安装及部署和操作命令做一个总结.如有不足,请指教. 使用的是阿里云服务器.CentOS7版本. Dokcer安装 1.Cent ...
- ASP.NET 打包发布中没有Visual Studio Installer
环境:win7 64位 : VisualStudio2015 问题描述 创建安装程序时,VisualStudio中没有打包安装程序的Visual Studio Installer功能 解决方法 下载V ...
- mysql双yes但是同步延时问题
今天发现在153服务器insert一条数据,然后查看从库154和162都没有这条数据,但是在154和162执行show slave status 显示的双yes 后来重启了153 154 162 ...