蓝桥杯算法提高 盾神与条状项链
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成一条项链然后送给他心仪的女生~于是他用其中一些珠子做成了长度为n的项链。当他准备把项链首尾相接的时候,土方进来了。
“哇这么恶心的项链你也做得出来!!!”
盾神自知审美不是他的长项,于是他很谦虚地请教土方,怎么才能把项链做得漂亮。
“这个嘛首先你要在这里加上一个这种颜色的珠子,然后在这里去掉这个珠子,然后……,最后你看看是不是漂亮很多咧”土方一下子说出了m个修改步骤。
盾神觉得这个用人工做太麻烦了,于是交给了你。
输入格式
第一行两个数,分别为n,m。
第二行n个数,表示盾神一开始的项链。第i个数表示第i颗珠子的颜色。
接下来m行,为以下形式之一:
ADD P Q:表示在颜色为P的珠子前面加上一个颜色为Q的珠子。
DEL P:表示把颜色为P的珠子去掉,如果它不在端点处,则需要把它旁边的两颗珠子连起来。例如某时刻项链状态为1 4 5 8,则执行DEL 4会变成1 5 8,执行DEL 1会变成4 5 8。
输入保证在每次操作之前,项链有颜色为P的珠子,且任意时刻珠子颜色互不相同。
输出格式
第一行为一个数len,为做完所有操作后,项链的长度。
第二行len个数,表示此时项链的状态。第i个数表示第i颗珠子的颜色。
样例输入
10 5
1 2 3 4 5 6 7 8 9 10
DEL 5
ADD 7 5
DEL 10
ADD 4 20
ADD 20 12
样例输出
11
1 2 3 12 20 4 6 5 7 8 9
数据规模和约定
表示颜色的数字不超过105的正数,1<=n<=104,1<=m<=10^4。
解题思路:
本题按照题目要求来使用链表进行操作即可,不过使用链表时有个小技巧,就是增加一个附加头结点,因为是用整形数据(int)表示珠子的颜色,所以头结点的int型变量可以表示除头结点外其余链结点的个数,输出时,珠子的个数即为头结点中int型属性的值,加一个附加头结点,也方便了删除和增加珠子的操作,不需要对首节点进行分情况讨论,增加题解的复杂度
#include<iostream>
#include<string.h>
using namespace std;
struct Lian{//链表 int color;//头结点表示个数,其他结点表示颜色Lian *link;//指向下一个 Lian(){//无参构造函数 color=-1;link=NULL;}Lian(int co){//有一个参数的有参构造函数 color=co;link=NULL;}
};
int n,m;//表示竹子个数和操作次数
Lian *first=new Lian();//定义头结点
void Del(int a);//删除珠子a
void Add(int a,int b);//在珠子a前面加珠子b
int main()
{cin>>n>>m;int i;//循环变量int color;//表示输入的颜色char str[4];//表示输入的 first->color=0;//表示只有0个珠子 Lian *t=first;//t指向要加入数据的前一个结点 int a,b;//表示输入的数 for(i=0;i<n;i++){cin>>color;first->color++;Lian *Next=new Lian(color);//新建一个珠子t->link=Next;t=t->link; } for(i=0;i<m;i++){cin>>str;if(strcmp(str,"DEL")==0){cin>>a;//表示要删除的数 Del(a);//删除a }else{cin>>a>>b;//在数a前添加b Add(a,b);}} cout<<first->color<<endl;t=first->link;while(t!=NULL){cout<<t->color<<" ";t=t->link;}cout<<endl;return 0;
}
void Del(int a)//删除珠子a
{first->color--;Lian *left=first;//指向后面那个 Lian *right=first->link;//指向前面那个while(right!=NULL){if(right->color==a){//找到珠子a left->link=right->link;break; }right=right->link;left=left->link;} delete []right;
}
void Add(int a,int b)//在珠子a前面加珠子b
{first->color++;Lian *left=first;//后一个 Lian *right=first->link; //前一个while(right!=NULL){if(right->color==a){//在珠子a之前加入珠子b Lian *temp=new Lian(b);//新建一个结点temp->link=right;left->link=temp; break;}left=left->link;right=right->link;}
}
蓝桥杯算法提高 盾神与条状项链相关推荐
- 算法笔记_098:蓝桥杯练习 算法提高 盾神与条状项链(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成一条项链然后送给他心仪的女生~于是他用其中一些珠子做成了长度为n ...
- [Java] 蓝桥杯ADV-193 算法提高 盾神与条状项链
问题描述 有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成一条项链然后送给他心仪的女生~于是他用其中一些珠子做成了长度为n的项链.当他准备把项链首尾相接的时候,土方进来了. ...
- 蓝桥杯 ADV-193算法提高 盾神与条状项链
问题描述 有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成一条项链然后送给他心仪的女生~于是他用其中一些珠子做成了长度为n的项链.当他准备把项链首尾相接的时候,土方进来了. ...
- 蓝桥杯 ADV-193 盾神与条状项链 (试题解析)
试题 算法提高 盾神与条状项链 提交此题 评测记录 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成 ...
- [蓝桥杯][算法提高VIP]Sharing Chocolate(状压dp记忆化搜索)
题目描述 每天,巧克力在它的许多形式上被全世界数百万人分享.它是一个真正普遍的糖果,实际上在世界上每个国家都能得到. 你发现唯一比吃巧克力更好的事情是把它分享给朋友.不幸的是,你的朋友非常挑剔,有着不 ...
- [蓝桥杯][算法提高VIP]夺宝奇兵-递推+记忆化搜索
题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...
- [蓝桥杯][算法提高VIP]夺宝奇兵-dp
题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...
- c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...
- 算法提高 盾神与积木游戏
算法提高 盾神与积木游戏 时间限制:1.0s 内存限制:256.0MB 问题描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们 ...
- JAVA 蓝桥杯 算法提高 阮小二买彩票
JAVA 蓝桥杯 算法提高 阮小二买彩票 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电 ...
最新文章
- 简述DataInputStream和DataOuputStream
- 自然语言处理工具hanlp自定义词汇添加图解
- 晶闸管有几个pn结_晶闸管的电路符号和图片识别
- 调试Android之system.img的来回切换。
- stm32单片机屏幕一直闪_STM32使用HAL库函数点亮OLED
- 漫画:如何证明sleep不释放锁,而wait释放锁?
- 专访OPPO Find X5产品经理:深耕自研芯片 以最高标准打造极致旗舰体验
- 如何给namedtuple添加docstring
- Android N代码暗示隐藏的“多窗口”模式
- 算法与数据结构 第2章 排序基础 上
- IT6613,是一款BT1120 TO HDMI 单转芯片
- dirent struct_关于readdir返回值中struct dirent.d_type的取值有关问题(转)
- SMT阻容件封装尺寸
- OSChina 周二乱弹 ——普通高等男友招生考试
- STM32 USB DFU功能
- PX4-AutoPilot教程-0-使用VMware虚拟机安装Ubuntu系统并搭建PX4开发环境(ROS+mavros+jMAVSim+gazebo+QGC+QT)
- AC68U koolshare 梅林固件使用IPV6
- 解决引入JS中文乱码问题
- KNN实现手写数字识别(Python-OpenCV)
- linux目录修改为英文