tyvj群上有人问就写了一下。。。似乎明白了很多东西

放心,O(常数)的算法肯定有,不要在意我前面的啰嗦。。。。

问题 G: 【基础】奖牌整理

时间限制: 1 Sec   内存限制: 32 MB
提交: 12   解决: 3
[ 提交][ 状态][ 讨论版]

题目描述

上完一天的课,小 Z 不但没有一丝疲惫感,反而觉得浑身是劲,好象又回到了童年, 他蹦蹦跳跳地回到家,吃过晚饭很快就做完了作业,抬头一看觉得房间太乱了,这不进入 初三后由于课业繁重一直没时间整理房间,现在有空了是时候该好好整理一下了。小 Z 首 先想要整理的是他那些心爱的奖牌,这些奖牌记录了小 Z 成长的足迹,其中有龙城少儿围 棋比赛的银牌,有华罗庚杯少年数学邀请赛的铜牌,份量最重的当数全国信息学奥林匹克 竞赛(National Olympiad in Informatics,简称 NOI)的金牌,小 Z 喜欢把他获得的奖牌 都挂在床头,并且成一字排开状,他每得到一枚奖牌就会在床头钉一颗钉子,将这枚奖牌 挂在所有奖牌的未尾,也就是说小 Z 的奖牌是按获得时间的先后顺序来排列的,现在小 Z 想把它们按金银铜的顺序排列,即所有的金牌挂在最前面,随后是银牌,最后是铜牌。小 Z 重排奖牌的方法很特别,他每次都是同时伸出双手各摘下一块奖牌,然后把这两块奖牌 的位置对换一下,即左手摘下的奖牌放到右手摘下的奖牌的位置,右手摘下的奖牌放到左手摘下的奖牌的位置,咦!这怎么看上去有点象交换赋值,太有才了!现在小 Z 想考考你, 给定奖牌序列,计算最少需要几次对换操作就可以将所有奖牌按金银铜牌的顺序排好。

输入

输入数据第一行只有一个正整数 N 表示奖牌序列的长度,其中 1≤N≤1000;第二行有 N 个大写字母,每个大写字母代表一枚奖牌,其中 G 代表金牌,S 代表银牌,B 代表铜牌。

输出

输出数据仅有一行包含一个整数,表示最少需要几次对换操作。

样例输入

9 SSGBBBSBG

样例输出

4

提示

样例解释

S    S    S<    G    G
S<    G    G    G    G
G<    S    S    S    S
B    B<    S    S    S
B    B    B    B<    S
B    B    B    B    B
S    S<    B    B    B
B    B    B    B    B
G    G    G<    S<    B

小 Z 的床头共有 9 枚奖牌,以上数据第一列为 9 枚奖牌的初始序列,每次操作将每列 中箭头指向的两个位置的奖牌对换,对换后变成右边一列的状态,经过 4 次对换操作所有

奖牌就按金银铜牌的顺序依次排好了,可以验证 4 步操作是必不可少的。

数据范围

10%的数据满足:奖牌种类只有两种

30%的数据满足:n≤10

60%的数据满足:n≤100

100%的数据满足:n≤1000

似乎蓝色的弄不掉了,就这样吧。。。

第一眼看到这题想到线段树。。我是不是和zhb神牛一样了。。。(自恋个屁!!)

然后我看清楚了初三得NOI金牌的更神牛小龙。。。跪。。我也初三为什么我没有NOI金牌

一开始我是想到这个做法其实跟冒泡排序很像,写了个程序:

    ans=0;for (i=1;i<=n-1;i++){for (j=i+1;j<=n;j++){if (a[i]<a[j]) {tmp=a[i];a[i]=a[j];a[j]=tmp;ans++;}}}cout<<ans;

结果很惨:全WA。

为什么呢,其实冒泡排序不是最少步数。。原因是因为冒泡永远是从前往后死板地搜,不要证明了吧。。。

然后我又想了种算法,又爆了。。不好意思发上来。。

这里有一种很简单的解法。。

首先我们得搞清楚一个问题,最后金牌一定在最前面,银牌中间,铜牌最后,那么结果肯定是GGG……GGGSSS……SSSBBB……BBB这样的。。

也就是说我们得让金牌往前站,银牌站中间,剩下位置就是铜牌的。

那么,金牌的位置是从前往后数g个(共有g个金牌),银牌是g+1到第g+s个(共有s个银牌)

只要金牌位上不是金牌,或者银牌位上不是银牌,就一定需要一个操作使金牌或银牌归位,

那么只要统计出有多少金牌银牌需要归位,相加即为答案。。。

但是还有一种特例:金牌在银牌位上,银牌在金牌位上,那么答案应该-1

----------------------------------分析到此结束--------------------------------------------

#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
char a[1005];
int main()
{int n,i,j,g,s,ans,t1,t2;  //g表示金牌个数,s表示银牌个数,t1表示金牌位上银牌个数,t2表示银牌位上金牌个数cin>>n;g=0;s=0;for (i=1;i<=n;i++) {cin>>a[i];if (a[i]=='G') g++;if (a[i]=='S') s++;}ans=0; t1=0; t2=0;for (i=1;i<=g;i++){ if (a[i]!='G') {ans++;}if (a[i]=='S') {t1++;}}for (i=g+1;i<=g+s;i++){ if (a[i]!='S') {ans++;}if (a[i]=='G') {t2++;}}ans-=min(t1,t2);cout<<ans;return 0;
}

-------------------------------------------程序如上----------------------------------------------

运行编号 用户 问题 结果 内存 耗时 语言 代码长度 提交时间
946712 seekdreamer
G
正确
1284
48
C++/Edit 718 B 2014-06-11 17:02:42
这个OJ似乎和9018很像啊(^-^)
下附一段代码,是tyvj群一盏鲸鱼灯写的,给大家膜拜哈。。。
varans,n,i,j,k,tot1,tot2,tot3:longint;a:array [0..1001] of longint;ch:char;beginreadln(n);tot1:=0;tot2:=0;tot3:=0;for i:=1 to n dobeginread(ch);case ch of'G':begininc(tot1);a[i] :=1;end;'S':begininc(tot2);a[i] :=2;end;'B':begininc(tot3);a[i] :=3;end;end;end;i:=1;j:=tot1+i;k:=tot2+j;ans:=0;while true dobeginwhile (a[i] =1) and (i<=tot1) doinc(i);if i>tot1 thenbreak;if a[i] =2 thenbeginwhile (a[j] <>1) and (j<=tot1+tot2) doinc(j);if j>tot1+tot2 thenbeginwhile (a[k] <>1) and (k<n) doinc(k);inc(ans);a[i] :=1;a[k] :=2;endelsebegininc(ans);a[i] :=1;a[j] :=2;end;endelsebeginwhile (a[k] <>1) and (k<=n) doinc(k);if k<=n thenbegininc(ans);a[i] :=1;a[k] :=3;endelsebeginwhile (a[j] <>1) and (j<=tot1+tot2) doinc(j);inc(ans);a[i] :=1;a[j] :=3;endend;end;j:=tot1+1;k:=tot2+j;while true dobeginwhile (a[j] =2) and (j<=tot1+tot2) doinc(j);if j>tot1+tot2 thenbreak;while (a[k] <>2) and (k<=n) doinc(k);inc(ans);a[j] :=2;a[k] :=3;end;writeln(ans);
end.

我会告诉你我没看吗..但是他过了是真的...

应该很多人需要pas代码吧.......

转载于:https://www.cnblogs.com/seekdreamer/p/3782354.html

【简单思考】jzxx奖牌整理相关推荐

  1. 驻足思考:瞬间整理思路并有力表达(先设个坑,不断学习整理)

    在跟一位智者讲述东西的时候,智者提出的,正是我需要改进的 驻足思考:瞬间整理思路并有力表达(先设个坑,不断学习整理) 参考: 驻足思考  http://wenku.baidu.com/link?url ...

  2. 各种简单滤波的区别整理

    各种简单滤波的区别整理 1. 均值滤波(对高斯噪声具有较好的处理效果) 均值滤波在去噪声的同时会有如下缺点:边界模糊效应明显.细节丢失比较严重:无法去掉噪声,只能微弱的减弱它. 高斯噪声:高斯噪声是指 ...

  3. 近期状态几点简单思考

    2019独角兽企业重金招聘Python工程师标准>>> 近期本应该是忙乎完各种大事小事,压力顿减的.但是感觉自己有点不在状态,似乎连续碰到一些看上去各不相关小问题,难道是自己有点&q ...

  4. 一个公众事件的简单思考(r12笔记第15天)

    今天看到朋友圈有在转一条消息,仔细看了下,就是昨天瞬间成为热点的辱母杀人案.几乎所有人都一边倒的支持于欢,而案情也在今天有了新进展,山东省高级人民法院已经受理,已派员赴山东阅卷并听取山东省检察机关汇报 ...

  5. 日记之简单思考:江郎才尽(人尽其才)与思维惯性、思维干扰20121210

    原由: 今天在工作过程中,针对产品功能总觉得缺憾很多,向领导报告了7个缺憾.而解决的办法无外乎原来被否定的复杂解决方案(方向上转变很大).搞得领导相当之郁闷. 内容: 主要是关于一个多路输出产品的测试 ...

  6. 动态属性 的简单思考

    动态属性表 我们最常见到的应该算是论坛了吧. 现在的论坛很多会有房产版块.然后房产的贴子会具备一些属性. 比如小区,几房几厅,但并不是所有的帖子都需要这个. 未来用户也可能自己定义一些类型的属性. 我 ...

  7. 通信方面工作一些简单的名词解释整理

    专业名词解释: 简单网络管理协议(SNMP)是专门设计用于在 IP 网络管理网络节点(服务器.工作站.路由器.交换机及HUBS等)的一种标准协议,它是一种应用层协议. SNMP 使网络管理员能够管理网 ...

  8. 关于12306火车票销售的简单思考

    昨天,大家在群里讨论了下12306的售票系统的算法问题,@北京-一苇渡江11同学和我提了要最小粒度锁,我给了一个相对简单的数据模型,不晓得可行性如何,欢迎大家拍砖. 我们假定有一趟列车K200,途径1 ...

  9. HTTP协议详解 简单易懂超详细整理版

    简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议,是 ...

最新文章

  1. CentOS7上编译多版本PHP并同时运行及systemd设置
  2. 20年老码农分享20条编程经验,你pick哪些?
  3. [ASP.NET] Session的了解
  4. hdu 4309(最大流+枚举状态)
  5. html5语义化布局分割代码,HTML5语义化标签布局的兼容性.html
  6. 从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
  7. LwIP之ICMP协议
  8. HF-NET环境配置与安装
  9. 模线性同余方程组求解
  10. 用Aspose.Words 从Word文档中提取表格数据
  11. Sitadel:一款功能强大的Web应用扫描器
  12. day 9.1 逻辑回归-二元回归与多元回归
  13. 一张对数字图像处理贡献最大的花花公子人体照
  14. ViewPager圆形指示器
  15. 洛谷P4043 支线剧情
  16. vue——双层循环嵌套
  17. unable to access ‘https://github.com/XXX.git/‘: LibreSSL SSL_read: error:02FFF03C:system library:fun
  18. 今日金融词汇---存货,是什么?
  19. 富文本编辑vue插件vue-quill-editor
  20. Shell脚本运行中的停止方法

热门文章

  1. vue中computed和watched的区别
  2. github pages无法访问的解决方法
  3. Jackson的@JsonFormat不生效问题
  4. java 跳一跳辅助 详细步骤(部分转载)
  5. 什么是云服务器ECS及详细介绍
  6. [可视化编程]故宫博物院售票系统
  7. 安卓高德地图聚合点击事件_滴滴接入第三方平台服务商,试水聚合,又是一场新的运力争夺?...
  8. 谈谈产品和运营 - 所谓细节的探讨
  9. NYOJ-1236-挑战密室
  10. Ripple数据本地存储概览