武汉工程大学第五届程序设计新生赛 I题 题解
(2022,12,3)
原题链接(来自牛客竞赛)
抽象题意
题目有点长,我们需要抽象出一个模型:
一个长度为\(n\)的序列\(a_i\),从\(a_1\)开始向后跳,每次可以从\(a_i\)跳到下一位\(a_{i+1}\),或者跳到与\(a_i\)相同数字的任何一位。求跳到最后一位\(a_n\)所需的最小次数。
思路
为了方便我们记每一位的数字称为该位的颜色
从抽象出的模型可以看出,每一位所需的次数,即为跳到前一位所需次数与跳到同颜色所需最小次数之间的最小值,再加一
那我们用一个数组\(tim[i]\)记录每一位所需最小次数,以及每种颜色所需次数最小的位置\(col[i]\)(不直接记次数是因为第一次扫到这个颜色的时候,不知道这个跳到这里所需的次数为多少)
但是我们从前往后扫的话,实际上跳到同颜色所需次数最小的一位有可能在这一位的后面,我们怎么办呢,可以一直扫,直到每一位都确定下来,没有再更改为止
代码
#include<bits/stdc++.h>
#define MAXn 1000001
#define MAXk 110
#define inf 200000000
using namespace std;
int n;
int a[MAXn];
int tim[MAXn];//每位所需次数
int col[MAXk];//走到颜色i次数最小的位置
inline int minn(int x, int y)//手写min函数,更快
{
if(x < y)
return x;
else return y;
}
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
tim[i] = inf;
}
tim[1] = 0;
col[a[1]] = 1;
bool if_do = 1;
while(if_do)//一直去刷新看什么时候没有更改
{
if_do = 0;
for(int i = 2; i <= n; i++)//第一位肯定是确定的,从第二位开始
{
int tmp = tim[i];//先存下这个数,等会看看有没有被更改
if(col[ a[i] ])//如果这个颜色走过
tim[i] = tim[ col[ a[i] ] ] + 1;//先假设,这一位的最小次数,是由同颜色次数最小的一个位置跳过来的
else col[ a[i] ] = i;//第一次出现,那他应该是当前该颜色所需次数最小的 一位
tim[i] = minn( tim[i - 1] + 1, tim[i] );//看看从上一位走来是不是更快
if(tim[i] < tim[ col[ a[i] ] ]) //如果这一位所需的次数,比这一位颜色所需的最小,更新
col[ a[i] ] = i;
if(tmp != tim[i])
if_do = 1;//更新了继续做
}
}
printf("%d", tim[n]);
return 0;
}
武汉工程大学第五届程序设计新生赛 I题 题解的更多相关文章
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- Contest1036 - 2017西安电子科技大学程序设计新生赛网络预选赛
一名大三older 希望能帮助大一萌新...加油 xiandianer!!!!; xdoj 1260 (B) 水题 用了一下STL (好长啊...) #include<iostream> ...
- 2017年浙江工业大学大学生程序设计迎新赛热身赛-J-Forever97与寄信
Forever97与未央是一对笔友,他们经常互相写信.有一天Forever97去邮局寄信,发现邮局的收费方式变成了按字收费,收取的费用为总字数除了其自身以外的最大因子.虽然Forever97是一个有情 ...
- 福建工程学院第七届ACM程序设计新生赛 (同步赛)
A.关电脑 #include<bits/stdc++.h> using namespace std; typedef long long LL; int T,h1,m1,s1,h2,m2, ...
- 华中农业大学新生赛C题
http://acm.hzau.edu.cn/problem.php?id=1099 题意: 输入两个整数 l 和 n,代表半径和output的保留小数点位数. 输出圆的面积,保留n位小数. 一开始觉 ...
- 2017年浙江工业大学大学生程序设计迎新赛预赛 H - 栗酱的文明
题目描述 “伟大的勇士兔栽栗女王,所有栗子看到您都不寒而栗,但也非常尊重您.您骑着威风凛凛的小白兔,带领兔栽栗们奋勇前行.伟大史诗告诉我们,烈兔勇栗从大草原飞奔出来,冲在每场战争的前线 ...
- csp-s模拟测试55 联,赛,题题解
题面:https://www.cnblogs.com/Juve/articles/11610969.html 联: 用线段树维护区间和,要修改成1或0就线段树修改区间和 如果是异或,那么新的区间和就是 ...
- 2019山东ACM省赛L题题解(FLOYD传递闭包的变形)
本题地址 https://cn.vjudge.net/contest/302014#problem/L Median Time Limit: 1 Second Memory Limit: 6 ...
- 2019字节跳动冬令营day7娱乐赛19题题解
啊没去听讲题,也没发纸质题解,电子版题解也没有 为最后几个unsolve自闭了一段时间才全都A掉 3个队友写的我没看的题通过人数蛮多就不管了 题目地址:https://pan.baidu.com/s/ ...
- 福建工程学院第十四届ACM校赛M题题解 fwt进阶,手推三进制fwt
第九集,结束亦是开始 题意: 大致意思就是给你n个3进制的数字,让你计算有多少对数字的哈夫曼距离等于i(0<=i<=2^m) 思路: 这个是一个防ak题,做法是要手推公式的fwt 大概就这 ...
随机推荐
- IPS 和 IDS
IPS/IDS 什么是IPS和IDS IDS/IPS是检测和防止对网络服务器进行未授权的访问的系统.有许多产品同时有IDS和IPS的作用,作为加强企业信息安全所必须的系统 什么是IDS(Intrusi ...
- 文心一言 VS chatgpt (3)-- 算法导论2.1
一.以图 2-2 为模型,说明INSERTION-SORT 在数组 A=(31,41,59,26,41,58)上的执行过程. 文心一言: 以图 2-2 为模型,说明INSERTION-SORT 在数组 ...
- 2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构. 答案2023-04-06: 见moonfdd/ffmpeg-go库. 这段代码是一个示 ...
- 2022-11-12:以下rust语言代码中,结构体S实现了crate::T1::T2的方法,如何获取方法列表?以下代码应该返回[“m1“,“m2“,“m5“],顺序不限。m3是S的方法,但并不属于c
2022-11-12:以下rust语言代码中,结构体S实现了crate::T1::T2的方法,如何获取方法列表?以下代码应该返回["m1","m2"," ...
- 2022-09-14:以下go语言代码输出什么?A:0 0;B:0 1;C:1 1;D:1 0。 package main func main() { println(f(1)) } func
2022-09-14:以下go语言代码输出什么?A:0 0:B:0 1:C:1 1:D:1 0. package main func main() { println(f(1)) } func f(x ...
- drf——5个视图扩展类、9个视图子类、视图集、drf之路由
5个视图扩展类 # 写5个类(不叫视图类 视图拓展类 需要配合GenericAPIView一起用) 每个类有一个方法 以后想写哪个接口 就继承哪个类即可 from rest_framework.res ...
- SpringCloud+Eureka初识+Ribbon+Feign+Hystrix(服务熔断,服务降级)+hashbroad
Eureka注册中心 1.导包 <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework ...
- R 包 pathview 代谢通路可视化
pathview R 包是一个集成 pathway 通路数据与可视化的工具集.它用于把用户的数据映射并渲染到相关的 pathway 通路图上,用户只需要提供基因或者化合物数据(gene or comp ...
- 使用镜像加速 Rtools 下载与安装
在 windows 使用 R,尤其是安装 R 包的时候,经常会遇到一些 Rtools 的问题,今天聊一下. Rtools 是什么 Rtools 作用很大,但我们一般不怎么会直接使用. Rtools p ...
- RSA 加密解密
from Crypto.Util.number import bytes_to_long, long_to_bytes, getPrime import libnum # 一.取两个素数 p = ge ...