蓝桥杯—盾神与条状项链

思路:

  直接使用STL的list容器。

  分两种情况:

  1.DEL Q。直接调用void remove( const TYPE &val )函数即可。

  2.ADD P Q。首先找出P所在的位置,通过迭代器实现(看不懂迭代器的可以参考这篇文http://www.cnblogs.com/yc_sunniwell/archive/2010/06/25/1764934.html),之后将Q插入到P之前,调用iterator insert( iterator pos, const TYPE &val )函数即可实现。

代码如下:

 1 #include<list>
 2 #include<string>
 3 #include <iostream>
 4 using namespace std;
 5 void operate(int num,int step){
 6     string str;int P,Q;//str为"DEL"或"ADD",P为颜色为P的珠子,Q是颜色为Q的珠子
 7     list<int> *ls=new list<int>;
 8     for(int i=0;i<num;i++){    //输入链表值
 9         cin>>Q;
10         ls->push_back(Q);
11     }
12     for(int i=0;i<step;i++){
13         cin>>str;
14         if(str=="DEL"){//DEL P:表示把颜色为P的珠子去掉,如果它不在端点处,则需要把它旁边的两颗珠子连起来。例如某时刻项链状态为1 4 5 8,则执行DEL 4会变成1 5 8,执行DEL 1会变成4 5 8。
15             cin>>Q;
16             ls->remove(Q);
17         }else{//ADD P Q:表示在颜色为P的珠子前面加上一个颜色为Q的珠子。
18             cin>>P>>Q;
19             list<int>::iterator it=ls->begin();
20             while(*it!=P){
21                 it++;
22             }
23             ls->insert(it,Q);
24         }
25
26     }
27     list<int>::iterator it=ls->begin();
28     cout<<ls->size()<<endl;
29     while(it!=ls->end()){
30         cout<<*it<<" ";
31         it++;
32     }
33     delete ls;
34 }
35
36 int main(){//测试代码
37     int num,step;
38     cin>>num>>step;
39     operate(num,step);
40     return 0;
41 }
时间: 2024-11-05 17:14:52

蓝桥杯—盾神与条状项链的相关文章

盾神与条状项链

问题描述 有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成一条项链然后送给他心仪的女生~于是他用其中一些珠子做成了长度为n的项链.当他准备把项链首尾相接的时候,土方进来了. “哇这么恶心的项链你也做得出来!!!” 盾神自知审美不是他的长项,于是他很谦虚地请教土方,怎么才能把项链做得漂亮. “这个嘛~首先你要在这里加上一个这种颜色的珠子,然后在这里去掉这个珠子,然后……,最后你看看是不是漂亮很多咧~”土方一下子说出了m个修改步骤. 盾神觉得这个用人工做太麻烦了,于是交给了

算法笔记_098:蓝桥杯练习 算法提高 盾神与条状项链(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成一条项链然后送给他心仪的女生~于是他用其中一些珠子做成了长度为n的项链.当他准备把项链首尾相接的时候,土方进来了. "哇这么恶心的项链你也做得出来!!!" 盾神自知审美不是他的长项,于是他很谦虚地请教土方,怎么才能把项链做得漂亮. "这个嘛~首先你要在这里加上一个这种颜色的珠子,然后在这里去掉这个珠子,然后--,最后你看看是不是漂亮很多咧~&

蓝桥杯 算法提高 盾神与条状项链

题目如下: 本来自己写了个链表,但是写的有问题,通不过后3组数据,后来在同学的提示下,用数组模拟链表,然后我就用2元数组模拟双向链表,因为此题颜色不重复,所以模拟较为简单,代码如下: #include<stdio.h> typedef struct Color { int pre; int next; }color; color c[100001]; int m,n; int main() { int i,j,cr,p0=0,n0,P,Q; char s[4]; scanf("%d%

C++:盾神与条状项链

实现代码如下: #include<cstdlib> #include <string> #include <iostream> using namespace std; int main() { int n, m; cin >> n >> m; int *a = (int *)malloc(n * sizeof(n)); for (int i = 0; i < n; i++) cin >> a[i]; //定义m次操作 for

蓝桥杯 节点选择 树状动态规划

算法训练 结点选择 时间限制:1.0s   内存限制:256.0MB 锦囊1 使用树型动态规划. 锦囊2 用F[i]表示从子树i中选择结点,且结点i必须被选择的最大值,用G[i]表示从子树i中选择结点,且结点i必须不被选择的最大值. 则F[i]=a[i]+\sum(G[j]),其中a[i]表示结点i的权值,j是i的子结点. G[i]=\sum(max(F[j], G[j])),其中j是i的子结点. 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和

蓝桥杯练习系统题解

转于:http://www.cnblogs.com/cshhr/p/3550014.html 蓝桥杯官网练习系统题解(非VIP) BEGIN-4(Fibonacci数列) 有递推公式,大家都知道用递推公式求,仅仅要记得在递推的时候同一时候取模求好 这里给一份另类代码,用矩阵高速幂求,事实上还有循环节 /* (1 1) * (Fn-1) = ( Fn )//矩阵相乘,将就着看吧 (1 0) (Fn-2) (Fn-1) (1 1) * (1 1) * (Fn-2) = ( Fn ) (1 0) (1

第六届蓝桥杯本科B组C++省赛题解

比赛结束已经一星期了,成绩也出来了,江苏非211组的省前十,但是深感自己还是有太多的不足.绝对不能以自己还只是大一为借口,acm这条路还长的很. 目测得了95分(满分150),第一题错了,代码填空第一题错了,倒数第二题扣了一点分,最后一道大题全错. 之所以会这么晚来发这道题解,是因为深感自己不足,倒数第二题之所以没有做出来,是因为自己居然不会用[矩阵快速幂].因此,现学现用以自省. 关于题目:所有填空题都可以纯暴力,只要会回溯剪枝法对于蓝桥杯已经足够了.大题目难度一年比一年高 第一题 结果填空

第六届蓝桥杯大赛个人赛省赛(软件类) Java 大学B组

好久没更新过博客了,就从蓝桥杯省赛开始更新吧. 第一题: 三角形面积 如图1所示.图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字. 解题分析:直接计算,8x8-(8x4)/2-4x6/2-8x2/2=28,没啥说的 第二题: 立方变自身 观察下面的现象,某个数字的立方,按位累加仍然等于自身. 1^3 = 1 8^3  = 512    5+1+2=8 17^3 = 4913   4+9+1+3=17 ... 请你计算包括1

第六届蓝桥杯2015-省赛-C语言大学B组 个人题解

题目连接:http://course.baidu.com/view/2d86a6c1960590c69fc37622.html 1,奖券数目52488 #include <iostream> using namespace std; bool isOK(int a) { while(a) { if(a%10==4) return false; a /= 10; } return true; } int main() { int ans = 0; for(int i=10000; i<=9