巴里卡是一只不同寻常的青蛙

巴里卡是一只不同寻常的青蛙。她住在一个池塘里,有N株植物漂浮在水面上。植物编号为1到N。从上面看时,每个植物的位置由一对坐标给出。让巴里卡与众不同的是她害怕斜向和反向跳跃。更准确地说,她可以从坐标(x1,y1)处的一个植物跳到坐标(x2,y2)处的另一个植物,前提是:

•x2>x1,y2=y1

•y2>y1,x2=x1

对于每一种植物,我们知道其附近的苍蝇数量。巴里卡可以用她敏捷的舌头吃掉她所在植物附近的所有苍蝇。

巴里卡每吃一只苍蝇就吸收一个能量单位,每跳一次就消耗K个能量单位。如果事先没有足够的能量单位,巴里卡就跳不起来。

巴里卡希望从1号植物到N号植物,并在到达后尽可能获得最大的能量。巴里卡一开始没有能量,她必须从植物1周围的苍蝇那里收集能量进行第一次跳跃。

找到巴里卡为了实现目标应该旅行的植物序列。

输入格式:
第一行输入包含两个整数N和K(2≤N≤300000,1≤K≤1000)被一个空格隔开。
以下N行中的每一行都包含三个整数X、Y和F(0≤X、Y≤100000,0≤F≤1000)用空格隔开,这意味着在坐标(X,Y)处有一个植物,周围有F。

输入中的第一个植物是植物1,第二个是植物2等。
没有两个植物会共享同一对坐标。

注:输入数据将保证跳转序列始终存在,尽管不一定是唯一的。

输出格式:
在第一行输出最终的能级。
输出一个整数L,即巴里卡应该旅行的植物数量,包括植物1和N。
在下面的L行上,输出Barica应该移动的植物序列。

输入样例1:
6 5
1 1 5
2 1 5
1 2 4
2 3 5
3 2 30
3 3 5
输出样例1:
5
4
1 1
2 1
2 3
3 3
输入样例2:
8 10
1 1 15
2 2 30
1 2 8
2 1 7
3 2 8
2 3 7
4 2 100
3 3 15
输出样例2:
36
5
1 1
1 2
2 2
3 2
3 3
输入样例3:
9 5
5 5 10
6 5 2
7 5 1
5 6 2
6 6 6
7 6 2
5 7 1
6 7 2
7 7 1
输出样例3:
2
3
5 5
7 5
7 7

dp[i]表示跳到第i珠植物的最大能量
dpx[x]表示跳到植物坐标为x的最大能量
dpy[y]表示跳到植物坐标为y的最大能量
对输入的2~n-1进行排序以确保他是往后跳的,因为1和n不能动.
假设当前的坐标和价值为[x,y,w],dp转移为之前的dpx[x]跳到第i珠植物或者是dpy[y]跳到第i珠植物 dp[i]=max(dpx[x]-k+w,dpy[y]-k+w),同时保存一下路径。

//#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pb push_back
#define pii pair<int,int>
#define yes cout<<"Yes\n"
#define no cout<<"No\n"
#define yesno if(fg)yes;else no;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int inf=1e9;
const int maxn=3e5+100;
struct node
{int x,y,w;
} t[maxn];
int dp[maxn];
pii dpx[maxn],dpy[maxn];//first保存最大能量,second保存植物编号
int pre[maxn];
int cmp(node a,node b)
{if(a.x==b.x) return a.y<b.y;return a.x<b.x;
}
signed main()
{int n,k;cin>>n>>k;for(int i=1; i<=n; i++){int x,y,w;cin>>x>>y>>w;t[i]= {x,y,w};}int idx=2;
//	for(int i=2;i<=n-1;i++)
//	{
//		if(t[i].x==t[1].x||t[i].y==t[1].y)
//		{
//			swap(t[i],t[idx]);
//			idx++;
//		}
//	}sort(t+idx,t+n,cmp);
//	cout<<"\n";
//	for(int i=1;i<=n;i++)
//	{
//		cout<<t[i].x<<" "<<t[i].y<<" "<<t[i].w<<"\n";
//	}dp[1]=t[1].w;dpx[t[1].x]= {t[1].w,1};dpy[t[1].y]= {t[1].w,1};for(int i=2; i<=n; i++){auto [x,y,w]=t[i];if(x>t[n].x||y>t[n].y)continue;if(x<t[1].x||y<t[1].y)continue;if(dpx[x].fi>=k){if(dpx[x].fi-k+w>dp[i]){dp[i]=dpx[x].fi-k+w;pre[i]=dpx[x].se;}}if(dpy[y].fi>=k){if(dpy[y].fi-k+w>dp[i]){dp[i]=dpy[y].fi-k+w;pre[i]=dpy[y].se;}}if(dp[i]>dpx[x].fi){dpx[x]= {dp[i],i};}if(dp[i]>dpy[y].fi){dpy[y]= {dp[i],i};}}cout<<dp[n]<<"\n";vector<int>v;int now=n;while(now>=1){v.pb(now);now=pre[now];}reverse(v.begin(),v.end());cout<<v.size()<<"\n";for(auto it:v){cout<<t[it].x<<" "<<t[it].y<<"\n";}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6408.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AI笔筒操作说明及应用场景

AI笔筒由来&#xff1a; 在快节奏的现代办公环境中&#xff0c;我们一直在寻找既能提升效率、增添便利&#xff0c;又能融入企业文化、展现个人品味的桌面伙伴。为此&#xff0c;我们特推出专为追求卓越、注重细节的您设计的AI笔筒礼品版&#xff0c;它集高科技与实用性于一身…

【笔面试常见题:三门问题】用条件概率、全概率和贝叶斯推导

1. 问题介绍 三门问题&#xff0c;又叫蒙提霍尔问题&#xff08;Monty Hall problem&#xff09;&#xff0c;以下是蒙提霍尔问题的一个著名的叙述&#xff0c;来自Craig F. Whitaker于1990年寄给《展示杂志》&#xff08;Parade Magazine&#xff09;玛丽莲沃斯莎凡特&#x…

Elasticsearch中时间字段格式用法详解

Elasticsearch中时间字段格式用法详解 攻城狮Jozz关注IP属地: 北京 2024.03.18 16:27:51字数 758阅读 2,571 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Lucene构建的开源、分布式、RESTful搜索引擎。它提供了全文搜索、结构化搜索以及分析等功能&#xff0c;广泛…

sql数据库-DQL-基本查询

目录 举例表emp 查询多个字段 查询整张表所有数据 给字段名起别名&#xff08;更方便阅读&#xff09; 去除重复的数据 举例表emp 查询多个字段 SELECT 字段1,字段2,字段3...FROM 表名; 举例查询emp表中的name&#xff0c;workno&#xff0c;age字段返回 查询整张表所有数据 …

JqGird 动态生成列使用

使用场景&#xff1a; 在工作用需要自定义动态生成列&#xff0c;通过选择下拉框&#xff0c;加载列&#xff0c;通过查询加载列对应的数据信息 当选择文件源任务显示三列 当选择数据源任务显示两列 处理方式&#xff1a; 1. 首先在刚进入界面时初始化控件 $("#pageGri…

Rust项目结构

文章目录 一、module模块1.二进制文件的cargo项目2.库的cargo项目3.文件内的module 二、模块化项目结构1.关于module2.各个模块之间互相引用 三、推荐项目结构1.实例 参考 一、module模块 crate规则&#xff1a; 规则一&#xff1a;一个包中必须至少包含一个crate规则二&#…

电能管理系统(源码+文档+部署+讲解)

本文将深入解析“电能管理系统”的项目&#xff0c;探究其架构、功能以及技术栈&#xff0c;并分享获取完整源码的途径。 系统概述 “工厂电能管理系统” 是一款集设备管理、维修管理、能耗监测、节能分析、储能管理、充电桩管理、冷源站管理、报警管理、点检管理等功能于一体…

网上纪念馆(源码+文档+部署+讲解)

最近我在挖掘一些优秀的开源项目时&#xff0c;无意间发现了一个相当给力的系统——网上纪念馆系统。这个系统不仅功能完善&#xff0c;满足了线上祭祀和纪念的需求&#xff0c;而且代码结构清晰&#xff0c;易于二次开发。作为一名技术爱好者&#xff0c;我觉得有必要把这个好…

华为HarmonyOS打造开放、合规的广告生态 - 贴片广告

场景介绍 贴片广告是一种在视频播放前、视频播放中或视频播放结束后插入的视频或图片广告。 接口说明 接口名 描述 loadAd(adParam: AdRequestParams, adOptions: AdOptions, listener: AdLoadListener): void 请求单广告位广告&#xff0c;通过AdRequestParams、AdOptions…

责任链模式 Chain of Responsibility

1 意图 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 2 结构 Handler 定义一个处理请求的接口;(可选)实现后继链。 ConcreteHandler …

【Linux】- 权限(2)

接上一篇文章&#xff0c;继续介绍linux权限的相关知识。https://blog.csdn.net/hffh123/article/details/143432940?spm1001.2014.3001.5501j 目录 一、chown&#xff1a;修改文件的拥有者 二、chgrp&#xff1a;修改文件所属组 三、关于other的介绍 四、文件类型 1、分类…

RTX5/FreeRTOS全家桶源码工程综合实战模板集成CANopen组件(2024-10-30)

【前言】 之前的视频教程分享了两期CANopen的专题&#xff0c;配套的例子都是基于裸机的&#xff0c;为了方便大家在OS下使用&#xff0c;本期视频带OS下的支持。 CANopen协议栈专题&#xff0c;实战方式系统了解NMT&#xff0c;PDO&#xff0c;SDO&#xff0c;时间戳&#x…

vue中实现列表无缝动态滚动

要想实现列表的动态无缝滚动&#xff0c;这里推荐两款组件&#xff0c;vue-seamless-scroll和vue3-seamless-scroll&#xff0c;组件的用法也非常简单&#xff0c;以下是使用方式。 vue2 vue2版本使用vue-seamless-scroll vue-seamless-scroll文档https://chenxuan0000.gith…

BeanDefinition体系架构(待...)

AbstractBeanDefinition 仅仅只有三个直接的子类&#xff0c;分别是&#xff1a;RootBeanDefinition、ChildBeanDefinition、GenericBeanDefinition 注&#xff1a;在 Spring2.5 之前&#xff0c;仅仅只有 RootBeanDefinition、ChildBeanDefinition 两个子类&#xff0c; 我们…

002-Kotlin界面开发之Kotlin旋风之旅

Kotlin旋风之旅 Compose Desktop中哪些Kotlin知识是必须的&#xff1f; 在学习Compose Desktop中&#xff0c;以下Kotlin知识是必须的&#xff1a; 基础语法&#xff1a;包括变量声明、数据类型、条件语句、循环等。面向对象编程&#xff1a;类与对象、继承、接口、抽象类等。…

基于SpringBoot的教务系统

本系统集成了权限管理与用户管理两大核心功能&#xff0c;允许灵活添加用户角色及其对应权限。 技术选型&#xff1a;SpringBootVueShiromybatis 当前系统预设了四种用户类型&#xff0c;具体如下&#xff1a; 管理员&#xff1a;拥有系统的全部权限&#xff0c;涵盖基础管理…

详解Python面向对象程序设计

Python面向对象程序设计 1&#xff0c;初识类和对象2&#xff0c;类的定义和使用3&#xff0c;构造方法4&#xff0c;常用的类内置方法4.1&#xff0c;字符串方法&#xff1a;__str__ 4.2&#xff0c;是否小于&#xff1a;__lt__4.3&#xff0c;是否小于等于&#xff1a;__le__…

LeetCode 热题100之二分

关于二分&#xff0c;之前也写过一篇&#xff0c;参考二分Acwing 1.搜索插入位置 思路分析&#xff1a;典型的 二分查找算法&#xff0c;用于在一个已排序的数组中查找目标值的位置。如果找到了目标值&#xff0c;返回其索引&#xff1b;如果没有找到&#xff0c;则返回目标值…

Python+Appium+Pytest+Allure自动化测试框架-安装篇

文章目录 安装安装ADT安装NodeJs安装python安装appium安装Appium Server&#xff08;可选&#xff09;安装Appium-Inspector&#xff08;可选&#xff09;安装allure安装pytest PythonAppiumPytestAllure框架的安装 Appium是一个开源工具&#xff0c;是跨平台的&#xff0c;用于…

Twitter(X)2024最新注册教程

Twitter 现名为X&#xff0c;因为图标是一只小鸟的形象&#xff0c;大家也叫它小蓝鸟&#xff08;埃隆马斯克于 2023 年对该平台进行了品牌重塑&#xff09;&#xff0c;目前仍然是全球最受欢迎的社交媒体和微博平台之一&#xff0c;全球活跃用户量大概在4.5亿。尤其是欧美国家…