洛谷 P6704 [COCI2010-2011#7] GITARA

文章目录

  • [COCI2010-2011#7] GITARA
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 样例 #2
      • 样例输入 #2
      • 样例输出 #2
    • 提示
        • 样例 1 解释
        • 样例 2 解释
        • 数据规模及约定
        • 说明
  • 思路解析
  • 非常无脑非常长的CODE
  • 巨佬的简短CODE



[COCI2010-2011#7] GITARA

题目链接:https://www.luogu.com.cn/problem/P6704

题目背景

Darko 有一个想象的外星朋友,他有十亿根手指。外星人快速拿起吉他,在网上找到一段简单的旋律并开始弹奏。

这个吉他像寻常一样有六根弦,令其用 1 1 1 6 6 6 表示。每根弦被分成 P P P 段,令其用 1 1 1 P P P 表示。

旋律是一串的音调,每一个音调都是由按下特定的一根弦上的一段而产生的(如按第 4 4 4 弦第 8 8 8 段)。如果在一根弦上同时按在几段上,产生的音调是段数最大的那一段所能产生的音调。

例:对于第 3 3 3 根弦,第 5 5 5 段已经被按,若你要弹出第 7 7 7 段对应音调,只需把按住第 7 7 7 段,而不需放开第 5 5 5 段,因为只有最后的一段才会影响该弦产生的音调(在这个例子中是第 7 7 7 段)。类似,如果现在你要弹出第 2 2 2 段对应音调,你必须把第 5 5 5 段和第 7 7 7 段都释放。

请你编写一个程序,计算外星人在弹出给定的旋律情况下,手指运动的最小次数。

题目描述

你有一个 6 × P 6 \times P 6×P 的矩阵 A A A,初始状态皆为 0 0 0

对于所有要求 ( i , j ) (i,j) (i,j)

你需要满足要求:

  1. 此时 A i , j A_{i,j} Ai,j 状态为 1 1 1

  2. 对于 A i , j + k ( k > 0 ) A_{i,j+k} (k>0) Ai,j+k(k>0) 状态为 0 0 0

你在满足要求的情况下需要求状态转换最小次数。

输入格式

第一行包含两个正整数 n n n P P P。它们分别指旋律中音调的数量及每根弦的段数。

下面的 n n n 行每行两个正整数 i i i j j j,分别表示能弹出对应音调的位置——弦号和段号,其为外星人弹奏的顺序。

输出格式

一个非负整数表示外星人手指运动次数最小值。

样例 #1

样例输入 #1

5 15
2 8
2 10
2 12
2 10
2 5

样例输出 #1

7

样例 #2

样例输入 #2

7 15
1 5
2 3
2 5
2 7
2 4
1 5
1 3

样例输出 #2

9

提示

样例 1 解释

所有的音调都是由第二根弦产生的。首先按顺序按 8 8 8 10 10 10 12 12 12 c o u n t = 3 count=3 count=3)。然后释放第 12 12 12 段( c o u n t = 4 count=4 count=4)。最后,按下第 5 5 5 段,释放第 8 8 8 10 10 10 段 ( c o u n t = 7 count=7 count=7)。

样例 2 解释

对于每个操作,分别需要 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 0 0 0 2 2 2 次手指运动。

数据规模及约定

按下或释放一段弦各计一次手指运动。弹弦不算手指的移动,而是一个弹吉他的动作。(指你不需要管他怎么弹的,只需要按就是啦,说不定他可以用超能力呀)

对于 100 % 100\% 100% 的数据 n ≤ 5 × 1 0 5 n \le 5 \times 10^5 n5×105 2 ≤ P ≤ 3 × 1 0 5 2 \le P \le 3 \times 10^5 2P3×105

说明

本题满分 70 70 70 分。

译自 COCI2010-2011 CONTEST #7 T3 GITARA



思路解析

有六根弦,每根弦只有最前面的一段发生,所以我们可以用六个栈来模拟六根弦。

  • 如果要按的段比当前最大的段要大就直接压栈
  • 如果要按的段比当前最大的段要小,那么不断弹栈直到栈空或者没有比它小的段停止,判断当前段是否跟需要按得段一致,一致就不需要操作,比它小就需要压栈

非常无脑非常长的CODE

#include <iostream>
#include <cstring>
#include <algorithm>
#define ll long longusing namespace std;const int N = 3000005, p = 300005;
int stk[8][N];
int n, P;
int t1 = -1;
int t2 = -1;
int t3 = -1;
int t4 = -1;
int t5 = -1;
int t6 = -1;int main(){cin >> n >> P;int ans = 0;int i, j;while(n--){scanf("%d%d", &i, &j);if(i == 1){while(t1 > -1 && stk[1][t1] > j){t1--;ans++;}if(t1 == -1 || stk[1][t1] < j){stk[1][++t1] = j;ans++;}}else if(i == 2){while(t2 > -1 && stk[2][t2] > j){t2--;ans++;}if(t2 == -1 || stk[2][t2] < j){stk[2][++t2] = j;ans++;}}else if(i == 3){while(t3 > -1 && stk[3][t3] > j){t3--;ans++;}if(t3 == -1 || stk[3][t3] < j){stk[3][++t3] = j;ans++;}}else if(i == 4){while(t4 > -1 && stk[4][t4] > j){t4--;ans++;}if(t4 == -1 || stk[4][t4] < j){stk[4][++t4] = j;ans++;}}else if(i == 5){while(t5 > -1 && stk[5][t5] > j){t5--;ans++;}if(t5 == -1 || stk[5][t5] < j){stk[5][++t5] = j;ans++;}}else if(i == 6){while(t6 > -1 && stk[6][t6] > j){t6--;ans++;}if(t6 == -1 || stk[6][t6] < j){stk[6][++t6] = j;ans++;}}}cout << ans << endl;
} 

代码虽然 A C AC AC,但是显得特别sb,复用很多不优雅不美观,但是想不到怎么优化,于是看了题解,果然还是题解大神nb啊,用数组存了栈顶指针,大大节省了代码量,tql,%%%%%%%%,果然还是我太菜了 <_>

巨佬的简短CODE

#include<iostream>
#include<cstdio>
using namespace std;
int n,p,x,y,s,sum[7],a[7][300005];
int main()
{scanf("%d%d",&n,&p);for(int i=1;i<=n;i++){scanf("%d%d",&x,&y);while(sum[x]>=1&&a[x][sum[x]]>y)//判断栈是否空,还有比较栈顶{sum[x]--;//减减s++;//累加次数	}if(a[x][sum[x]]==y)continue;//如果与栈顶相同就跳过a[x][++sum[x]]=y;//入栈s++;//累加次数} printf("%d",s);//输出次数return 0;
} 

来源:https://blog.csdn.net/weixin_45524309/article/details/108541871

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA编译器的永久试用设置与基本使用

参考视频&#xff1a; 最通俗易懂的JDK、IDEA的安装使用权威指南 2023新版前端Web开发HTML5CSS3移动web视频教程&#xff0c;前端web入门首选黑马程序员 文章目录 一.安装包下载与安装二.设置IDEA永久试用三.IDEA的基本试用0.IDEA管理Java程序的结构1.工程创建2.模块创建3.包创…

郑州数字孪生技术推进制造业升级,工业物联网可视化应用加速

郑州数字孪生技术推进制造业升级&#xff0c;工业物联网可视化应用加速。数字孪生系统的特点模型数据&#xff0c;其区别于传统仿真或数字样机&#xff0c;在于结合模型&#xff0c;数字孪生体能利用大数据处理技术&#xff0c;有效对物理实体运行所产生的大数据分析处理和治理…

【2023.11.28】关于Servlet路径的学习

创建Servlet 这是Tomcat配置的初始路径&#xff0c;在web项目内&#xff0c;该路径代表了webapp下index.html所在的页面。 WebServlet(name "login", value "/login",loadOnStartup 1) public class LoginServlet extends HttpServlet { 使用注解的方…

第一百八十二回 自定义一个可以滑动的刻度尺

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法3. 示例代码4. 内容总结我们在上一章回中介绍了"如何绘制阴影效果"相关的内容,本章回中将介绍 如何自定义一个可以滑动的刻度尺.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 任何优美的文字在图…

Aseprite for mac(像素动画制作工具)

Aseprite是一款专业的像素绘图软件&#xff0c;旨在方便用户创建动画和像素艺术作品。该软件提供了一系列强大的绘图工具和动画功能&#xff0c;使其成为许多游戏开发者、动画师和艺术家的首选工具之一。 Aseprite具有用户友好的界面&#xff0c;易于上手&#xff0c;使用户可以…

JSP迭代标签之 forEach循环标签 基本使用讲解

好 之前我们讲完了 我们的条件动作标签 那么 我们来继续说 迭代标签 所谓迭代就是 将某个主体循环多次 也可以循环 集合 对象 map 这个标签叫 forEach items 就是 我们要循环的数据 注意 这里 操作的也是域对象中的值 begin 开始说 例如 i 0;i<x;i begin 就是开始数 当前…

Python财经股票数据保存表格文件 <雪球网>

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.10 解释器 Pycharm 编辑器 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了&…

互联网架构演变过程梳理和架构思想的学习

文章目录 版权声明业务架构单体模式中台战略去中台化 数据架构单数据库架构主从读写分库分表高速缓存数据多样化分布式文件nosql搜索引擎架构特点 应用架构单机调优动静分离SOA微服务 部署架构单机部署⻆⾊划分应⽤集群多层代理异地访问云平台 架构思想总结 版权声明 本博客的…

PHP逻辑运算符学习资料

PHP逻辑运算符 在PHP中&#xff0c;逻辑运算符用于组合和比较不同的逻辑条件。下面是PHP中常用的逻辑运算符示例&#xff1a; 1. 与运算符&#xff08;&& 或 and&#xff09; $age 25; $isStudent true;if ($age > 18 && $isStudent) {echo "You …

封装可多选的组件(Autocomplete)

一。组件库Material UI 1.1 地址 https://v4.mui.com/zh/getting-started/installation/ 1.2 简介 自称世界上最受欢迎的React UI组件库(能看到这里的基本用法应该都清楚了&#xff0c;我就不重复了) 二。效果展示 三。代码展示 import React from reactimport { useField, us…

【VRTK】【VR开发】【Unity】9-瞬移

课程配套学习资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【移动的种类】 瞬移只是VR中移动的一种种类,其它还有连续移动,物理移动,摔臂移动等等。 瞬移自身也有多个分类,本篇介绍: 即时瞬移冲刺瞬移定点瞬移【瞬…

JDBC概述(什么是JDBC?JDBC的原理、Mysql和Sql Server入门JDBC操作)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍JDBC概述&#xff08;什么是JDBC&#xff1f;JDBC的原理、Mysql和Sql Server入门JDBC操作&#xff09;简单知识以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &a…

Android 13 - Media框架(14)- OpenMax(三)

上一节学习了 media.codec 服务中的部分内容&#xff0c;这一节我们将一起了解 OMX IL 层的 API 以及相关的结构体等内容。 1、相关路径 以下是 Media 相关的头文件路径&#xff1a; frameworks/native/headers/media_plugin/media/ cas 和 drm 是用于加密流解密使用&#xff…

python3: jieba(“结巴”中文分词库) .2023-11-28

1.安装 jieba库(Windows系统) 打开cmd.exe(命令提示符) ,输入 下面内容后回车, 完成jieba库安装 pip install -i https://mirrors.bfsu.edu.cn/pypi/web/simple jieba 2.例题: 键盘输入一段文本&#xff0c;保存在一个字符串变量txt中&#xff0c;分别用Python内置函数及jie…

java后端实现信息分页查询

java后端实现信息分页查询 需求分析 在一个页面展示大量的用户信息不便于观看&#xff0c;因此采用分页展示的方法。用户可以通过分页条自己选择查看的数量。可以用条件过滤一些信息&#xff0c;在查询的同时还需要分页展示 代码开发 流程&#xff1a; 页面发送ajax请求&…

项目七 熟练使用Vim程序编辑器与shell

项目七 熟练使用Vim程序编辑器与shell #职业能力目标和要求 1&#xff0c;学会使用vim编辑器。 2&#xff0c;了解shell的强大功能和shell的命令解释过程。 3&#xff0c;学会使用重定向和管道的方法。 4&#xff0c;掌握正则表达式的使用方法。7.1 熟悉使用vim编辑器 7.1.1 …

使用opencv将sRGB格式的图片转换为Adobe-RGB格式【sRGB】【Adobe-RGB】

在C中使用OpenCV将图像从sRGB格式转换为Adobe RGB格式&#xff0c;需要应用特定的线性转换矩阵。sRGB和Adobe RGB使用不同的色彩空间&#xff0c;这意味着它们在色彩表达上有所不同。通常&#xff0c;这样的转换涉及到对RGB颜色值的线性变换。 但是&#xff0c;需要注意的是&a…

羽隔已就之图像处理之BP神经网络入门

小y最近非常忙&#xff0c;这一年来&#xff0c;活很多&#xff0c;一直在加班、出差&#xff0c;也没好好休息过。最近在武汉出差一个多月了&#xff0c;项目逐渐完结&#xff0c;有点闲时间了&#xff0c;回首望&#xff0c;这一年设定的很多目标都没完成。 还记得&#xff0…

深入Rust的模式匹配与枚举类型

今天&#xff0c;我们将深入探讨Rust语言中的两个强大特性&#xff1a;模式匹配&#xff08;Pattern Matching&#xff09;和枚举类型&#xff08;Enums&#xff09;。这两个特性是Rust提供的核心工具之一&#xff0c;它们在处理多种类型的数据和复杂的逻辑控制中发挥着关键作用…

七、Lua字符串

文章目录 一、字符串&#xff08;一&#xff09;单引号间的一串字符&#xff08;二&#xff09;local str "Hello, "&#xff08;三&#xff09;[[ 与 ]] 间的一串字符&#xff08;四&#xff09;例子 二、字符串长度计算&#xff08;一&#xff09;string.len&…