守卫

2024-03-16 23:48
文章标签 守卫

本文主要是介绍守卫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

守卫

题解

这道题是一个区间dp。若[l,r]中必须放一个点才能看完这个区间。

我们先确定右端点,  然后从左往右扫,记p为r能看到的最左端的点。在扫的过程中,用sum记录p及其右的答案。r最左边只能看到p,所以p-1 的纵坐标必定小于p即[l,p-1]中,p与p-1中必定有一个点被选。

因此dp式为

dp_{i,j}= sum+min\left ( dp_{l,p-1},dp_{l,p} \right )

扫的过程中,需要更新sum与p。sum更新后,把p更为l。

只要slope(l,r)> slope(p,r),l就可见

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream> 
#include<algorithm>
#include<stack>
#include<vector>
#include<queue>
using namespace std;
typedef long long LL;
#define gc() getchar()
LL n,h[5005],dp[5005][5005],ans;
template<typename _T>
inline void read(_T &x)
{_T f=1;x=0;char s=gc();while(s>'9'||s<'0'){if(s=='-')f=-1;s=gc();}while(s>='0'&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=gc();}x*=f;
}
double slope(LL l,LL r)
{return (1.0*(h[r]-h[l]))/(1.0*(r-l)); 
}
bool query(LL a,LL b,LL c)
{return slope(c,a)<slope(b,c);
}
int main()
{read(n);for(int i=1;i<=n;i++) read(h[i]);for(int i=1;i<=n;i++) dp[i][i]=1,ans^=1;//初始化for(int i=1;i<=n;i++){LL sum=1,p=0;for(int j=i-1;j>0;j--){if(query(j,p,i)||p==0) sum+=min(dp[j+1][p-1],dp[j+1][p]),p=j;//更新sum与pdp[j][i]=sum+min(dp[j][p-1],dp[j][p]);//dp从i到j的区间ans^=dp[j][i];//ans异或dp值//printf("%d %d:%d\n",j,i,dp[j][i]);}}printf("%lld",ans);return 0;
}

谢谢!!!

这篇关于守卫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817133

相关文章

react实现导航守卫

React本身并没有像Vue那样的直接名为“导航守卫”的概念,但在React Router中,我们可以通过特定的方法和技术来模拟和实现类似的功能。以下是对React Router中模拟导航守卫的详解: 1. 导航守卫的概念 导航守卫:在路由切换之前执行的钩子函数,用于控制路由的跳转。在Vue Router中,这通常用于路由鉴权,即在路由跳转之前判断用户是否有权访问目标页面。React中的模拟:

如何解决vue中的路由守卫失效问题

引言 1. 路由守卫简介 路由守卫是前端开发中一个至关重要的概念,特别是在使用单页应用(SPA)框架如React、Vue或Angular时。它们充当了SPA中的“门卫”,控制着用户对不同页面的访问权限。路由守卫的核心功能是确保用户在访问特定页面之前满足一定的条件,比如登录状态、权限验证等。 2. 路由守卫的重要性 安全性:防止未授权访问敏感页面。用户体验:根据用户状态引导至合适的页面,比如

Vue80-全局路由守卫:前置、后置

一、路由守卫的定义  二、需求  在第三步,做校验! 三、代码实现 3-1、前置路由守卫  注意,此时就不能将router一开始就暴露出去了! to和from是路由组件的信息。 写法一:  写法二: 缺点:若是路由判断很多,此写法会很繁琐。 写法三:路由元信息:程序员自定义的信息   放在需要校验的路由规则

Vue82-组件内路由守卫

一、组件内路由守卫的定义  在一个组件里面去写路由守卫,而不是在路由配置文件index.js中去写。 此时,该路由守卫是改组件所独有的! 只有通过路由规则进入的方式,才会调这两个函数,否则,若是只是用<About/>标签进入的方式,是不会调用这两个函数的。 二、组件内路由守卫的代码实现  三、小结

Vue路由守卫的使用

示例如下:(第一张图)当你点击车1的时候你写了路由守卫就点不开出现无权访问 (第二张图,就是可以访问后的图)有路由守卫点不开的情况下当你在本地存储中写了你在路由守卫中写的东西就可以进入了 你需要在router下的index.js中(以下代码有我写的路由页面不用管,看有注释的代码是路由守卫,通过你定义的“user=张三“的时候访问就会显示出来第二张图) import Vue from 'vue

vue2前置路由守卫中使用this.$store.state报错解决

1、问题描述:在前置路由守卫逻辑中,要更改vuex中的store的state状态,使用常规的this.$store.state报错   2、问题原因: 在vue2是vueRouter前置路由守卫中,this关键字并不会指向vue实例,因此不能使用this.$store来访问vuex,此时会提示this.$store 是未定义的。 3、问题解决 如果在路由守卫中需要访问stor

祖祖辈辈守卫一方水土默默无闻地繁衍生息

快干完了的快乐 今天的快干完了的快乐,苏建军累了,这是无人不知无人不晓的快乐,从不展示她的高贵,我买青蛙,渴望天使的家降临,祖祖辈辈守卫一方水土默默无闻地繁衍生息,你做的对,易振秀家乡的美景和自己的感情在一起,付出一切从不索取半点回报我们朴实的土家人不也是如此吗他们辛勤的。 ,快干完了,xxx95分,连忙给我一只青蛙,老师开始报分,你有买什么了,妈妈高兴地说,把墙上的快乐污迹刮干净以后我说,

路由导航守卫-全局前置守卫

路由导航守卫中的全局前置守卫(Global Before Guards)是Vue Router中的一个重要概念。当路由即将改变(导航触发)时,这些守卫会按照创建顺序调用。它们允许你在路由跳转之前执行一些操作或判断,例如检查用户是否登录、是否拥有访问目标路由的权限等。 全局前置守卫的执行时机是在路由切换之前,因此它们可以用于在路由跳转之前进行拦截或处理一些逻辑。这些守卫是异步解析执行的,这意味着在

Vue router(路由守卫)

全局路由守卫 全局前置守卫 (router.beforeEach): 位置:在src/router/index.js文件中配置。 作用:对任何路由跳转(包括首次加载、手动导航、编程式导航)进行统一拦截。 示例代码: const router = new VueRouter({ /* ... */ });router.beforeEach((to, from, next) => {// 检查

【前端28_Vue-Cli 脚手架】萌新指南、安装脚手架、创建项目、项目目录介绍、路由重定向、路由守卫、Vuex、代码规范ESlint、常用组件:Element、Vue-Axios

注:标题加*星号,代表比较重要 文章目录 Vue-cli 脚手架介绍安装创建一个项目代码创建图形界面GUI创建项目 项目目录介绍路由路由重定向路由守卫*全局中的守卫路由独享的守卫组件中的路由守卫完整的导航流程 Vuex*Vuex 介绍组成state定义变量使用变量 mutations定义方法使用方法 actions定义异步操作使用异步操作 getters定义装潢公司使用装潢公司 代码规