(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题 题解的更多相关文章

  1. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  2. Contest1036 - 2017西安电子科技大学程序设计新生赛网络预选赛

    一名大三older 希望能帮助大一萌新...加油 xiandianer!!!!; xdoj 1260 (B) 水题 用了一下STL (好长啊...) #include<iostream> ...

  3. 2017年浙江工业大学大学生程序设计迎新赛热身赛-J-Forever97与寄信

    Forever97与未央是一对笔友,他们经常互相写信.有一天Forever97去邮局寄信,发现邮局的收费方式变成了按字收费,收取的费用为总字数除了其自身以外的最大因子.虽然Forever97是一个有情 ...

  4. 福建工程学院第七届ACM程序设计新生赛 (同步赛)

    A.关电脑 #include<bits/stdc++.h> using namespace std; typedef long long LL; int T,h1,m1,s1,h2,m2, ...

  5. 华中农业大学新生赛C题

    http://acm.hzau.edu.cn/problem.php?id=1099 题意: 输入两个整数 l 和 n,代表半径和output的保留小数点位数. 输出圆的面积,保留n位小数. 一开始觉 ...

  6. 2017年浙江工业大学大学生程序设计迎新赛预赛 H - 栗酱的文明

    题目描述         “伟大的勇士兔栽栗女王,所有栗子看到您都不寒而栗,但也非常尊重您.您骑着威风凛凛的小白兔,带领兔栽栗们奋勇前行.伟大史诗告诉我们,烈兔勇栗从大草原飞奔出来,冲在每场战争的前线 ...

  7. csp-s模拟测试55 联,赛,题题解

    题面:https://www.cnblogs.com/Juve/articles/11610969.html 联: 用线段树维护区间和,要修改成1或0就线段树修改区间和 如果是异或,那么新的区间和就是 ...

  8. 2019山东ACM省赛L题题解(FLOYD传递闭包的变形)

    本题地址 https://cn.vjudge.net/contest/302014#problem/L Median Time Limit: 1 Second      Memory Limit: 6 ...

  9. 2019字节跳动冬令营day7娱乐赛19题题解

    啊没去听讲题,也没发纸质题解,电子版题解也没有 为最后几个unsolve自闭了一段时间才全都A掉 3个队友写的我没看的题通过人数蛮多就不管了 题目地址:https://pan.baidu.com/s/ ...

  10. 福建工程学院第十四届ACM校赛M题题解 fwt进阶,手推三进制fwt

    第九集,结束亦是开始 题意: 大致意思就是给你n个3进制的数字,让你计算有多少对数字的哈夫曼距离等于i(0<=i<=2^m) 思路: 这个是一个防ak题,做法是要手推公式的fwt 大概就这 ...

随机推荐

  1. (亲自实践)解决安装weditor报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 825

    升级weditor时,报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 825: illegal multib ...

  2. 微信小程序客服、支付、定位、下拉加载功能

    一.客服功能 1.只要你微信小程序,后台添加了客服,引用以下button,就可以进入聊天(在小程序官网如何添加客服用户,请自行百度,谢谢) 2.通过按钮方式 <button open-type= ...

  3. 2021-02-04:第一年农场有1只成熟的母牛A,往后的每年:①每一只成熟的母牛都会生一只母牛 ②每一只新出生的母牛都在出生的第三年成熟 ③每一只母牛永远不会死 。请问N年后牛的数量是多少 ?

    2021-02-04:第一年农场有1只成熟的母牛A,往后的每年:①每一只成熟的母牛都会生一只母牛 ②每一只新出生的母牛都在出生的第三年成熟 ③每一只母牛永远不会死 .请问N年后牛的数量是多少 ?福哥答 ...

  4. 2021-07-10:请返回arr中,求子数组的累加和,是<=K的并且是最大的。返回这个最大的累加和。

    2021-07-10:请返回arr中,求子数组的累加和,是<=K的并且是最大的.返回这个最大的累加和. 福大大 答案2021-07-10: 时间紧.见代码. 时间复杂度:O(N*logN).空间 ...

  5. vue全家桶进阶之路15:自定义指令

    Vue 2.x 中的自定义指令是一种可以用于扩展 Vue.js 核心功能的特性.指令可以用于操作 DOM 元素的属性.监听 DOM 事件.控制 DOM 行为等等,可以将常见的交互行为封装成指令,从而让 ...

  6. uni-app 背景图片

    背景图片 uni-app 支持使用在 css 里设置背景图片,使用方式与普通 web 项目大体相同,但需要注意以下几点: 支持 base64 格式图片. 支持网络路径图片. 小程序不支持在 css 中 ...

  7. Vue2 去除定时器之常用三种方式及特殊方式

    一般情况去除定时器的常用的三种方式方法:创建一下三种钩子函数,一般有其中一个就足以实现清除定时器的效果beforeDestroy(){ beforeDestroy(){ // 离开当前路由前的操作 c ...

  8. laravel ServiceProvider 服务提供者使用案例

    1. 实例化一个类 2.全局注册这个类 3.在控制器中使用 public function register() { $this->app->singleton('wxminapp', f ...

  9. Net 如何获取私有属性

    .Net的私有属性.成员变量.方法,都可以通过反射获取调用,当然正常我们不会这么操作 此章只是做一个反射科普,像EFCore从数据库取值的底层框架就是通过反射直接操作私有的成员变量,而不是方法. 直接 ...

  10. Docker 的安装及常用命令

    CentOS Docker 安装 参看链接 Windows安装 Docker Desktop 官方下载地址: https://hub.docker.com/editions/community/doc ...