对称排序

对称排序

时间限制:1000 ms  |  内存限制:65535 KB

难度:1

描述

In your job at Albatross Circus Management (yes, it's run by a bunch of clowns), you have just finished writing a program whose output is a list of names in nondescending order by length (so that each name is at least as long as
the one preceding it). However, your boss does not like the way the output looks, and instead wants the output to appear more symmetric, with the shorter strings at the top and bottom and the longer strings in the middle. His rule is that each pair of names
belongs on opposite ends of the list, and the first name in the pair is always in the top part of the list. In the first example set below, Bo and Pat are the first pair, Jean and Kevin the second pair, etc.

输入
The input consists of one or more sets of strings, followed by a final line containing only the value 0. Each set starts with a line containing an integer, n, which is the number of strings in the set, followed by n strings, one per line, NOT SORTED. None
of the strings contain spaces. There is at least one and no more than 15 strings per set. Each string is at most 25 characters long.
输出
For each input set print "SET n" on a line, where n starts at 1, followed by the output set as shown in the sample output.
If length of two strings is equal,arrange them as the original order.(HINT: StableSort recommanded)
样例输入
7
Bo
Pat
Jean
Kevin
Claude
William
Marybeth
6
Jim
Ben
Zoe
Joey
Frederick
Annabelle
5
John
Bill
Fran
Stan
Cece
0
样例输出
SET 1
Bo
Jean
Claude
Marybeth
William
Kevin
Pat
SET 2
Jim
Zoe
Frederick
Annabelle
Joey
Ben
SET 3
John
Fran
Cece
Stan
Bill

查看代码---运行号:252342----结果:Accepted

运行时间:2012-10-05 16:35:20  |  运行人:huangyibiao

view sourceprint?

01.#include <iostream>

02.#include <string>

03.#include <vector>

04.using
namespace std;

05. 

06.int
main()

07.{

08.int
t;

09.string tmp;

10.int
set = 1;

11.while
(cin >> t && t != 0)

12.{

13.int
i = 1;

14.vector<string> vEven, vOdd, v;

15. 

16.for
(i = 0; i < t; i++)

17.{

18.cin >> tmp;

19.v.push_back(tmp);

20.}

21.for
(i = 0; i < t; i++)

22.{

23.for
(int
j = 0; j < t-i-1; j++)

24.{

25.if
(v[j].size() > v[j+1].size())

26.{

27.string s = v[j];

28.v[j] = v[j+1];

29.v[j+1] = s;

30.}

31.}

32.}

33.for
(i = 1; i <= t; i++)

34.{

35.if
(i % 2)//奇数位置

36.vOdd.push_back(v[i-1]);

37.else

38.vEven.push_back(v[i-1]);

39.}

40.cout <<
"SET " << set++ << endl;

41.for
(vector<string>::iterator it = vOdd.begin(); it != vOdd.end(); it++)

42.{

43.cout << *it << endl;

44.}

45.for
(vector<string>::reverse_iterator it = vEven.rbegin(); it != vEven.rend(); it++)

46.{

47.cout << *it << endl;

48.}

49. 

50.}

51.return
0;

52.}

时间: 2024-08-24 07:52:59

对称排序的相关文章

互联网信息搜索技术—对称搜索

互联网 信息搜索是互联网信息共享领域不可阻挡的用户需求.搜索技术的突破性进展对于互联网本身和互联网用户来说同样举足轻重. 搜索技术发展现状 第一代搜索引擎采用的基本方法是由网页制作人自行建立网站名称.网站内容的文字摘要,并将其加入到搜索引擎的资料库中.搜索引擎根据用户键入的信息进行匹配.排序和显示.这种方法的最大缺点是无法针对网页内容进行全文搜索:另外,它必须由网页制作者自行键入供搜索的资料. 第二代搜索引擎采取的基本方法是由搜索引擎使用一个程序在网络上撷取资料,并自动将得到的结果存入资料库中.

排序算法系列之冒泡排序

    交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止.应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序. 基本思想 1.冒泡排序算法的过程: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 2.以数组R

数据结构和算法17 之拓扑排序

  这一节我们学习一个新的排序算法,准确的来说,应该叫"有向图的拓扑排序".所谓有向图,就是A->B,但是B不能到A.与无向图的区别是,它的边在邻接矩阵里只有一项(友情提示:如果对图这种数据结构部不太了解的话,可以先看一下这篇博文:数据结构和算法之 无向图.因为拓扑排序是基于图这种数据结构的). 有向图的邻接矩阵如下表所示:   A B C A 0 1 1 B 0 0 1 C 0 0 0         所以针对前面讨论的无向图,邻接矩阵的上下三角是对称的,有一半信息是冗余的.而

C++11时代的标准库快餐教程(4) - 排序算法的应用

排序算法的应用 用排序做集合运算 - 子集,交集,并集与差集 上一节我们讲了排序算法,包括快速排序sort,堆排序partial_sort和归并排序stable_sort.并且讲了排序的第一个用法,二分法差找. 二分法是针对一个排序后的容器的用法,如果是多个有序容器,我们就可以快速地在其基础上进行集合的求子集,交集,并集与差集等运算. 我们还是先看一下图,排序相关算法都有哪些内容: 子集std::includes std::includes算法用于判断第一个迭代器是否包含第二个迭代器中的所有元素

排序算法python实现

先列出一些算法复杂度的标识符号的意思, 最常用的是O,表示算法的上届,如 2n2 = O(n2 ), 而且有可能是渐进紧确的, 意思是g(n)乘上一个常数系数是可以等于f(n)的,就是所谓的a<=b.而o的区别就是非渐进紧确的,如2n = o(n2 ), o(n2 )确实可以作为2n的上届, 不过比较大, 就是所谓的a 其他符号表示了下届,和非渐进紧确的下届, a>=b, a>b 还有既是上届也是下届, 就是a=b Bubble Sort 冒泡排序效率是最低的, 对于list中任意一点,

Android 安全加密:对称加密详解_Android

Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Android安全加密:消息摘要Message Digest Android安全加密:数字签名和数字证书 Android安全加密:Https编程 以上学习所有内容,对称加密.非对称加密.消息摘要.数字签名等知识都是为了理解数字证书工作原理而作为一个预备知识.数字证书是密码学里的终极武器,是人类几千年历史总结的智慧的结晶,只有在明白了数字证书工作原理后,才能理解Https 协议的安全通讯机制.

Android对称加密与非对称加密_Android

凯撒密码 1. 介绍 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.例如,当偏移量是3 的时候,所有的字母A 将被替换成D,B 变成E,由此可见,位数就是凯撒密码加密和解密的密钥. 例如:字符串"ABC"的每个字符都右移3 位则变成"DEF",解密的时候"DEF"的每个字符左移3 位即能

基于C++实现的各种内部排序算法汇总_C 语言

提起排序算法相信大家都不陌生,或许很多人已经把它们记得滚瓜烂熟,甚至随时可以写出来.是的,这些都是最基本的算法.这里就把各种内部排序算法总结归纳了一下,包括插入排序(直接插入排序,折半插入排序,希尔排序).交换排序(冒泡排序,快速排序).选择排序(简单选择排序,堆排序).2-路归并排序.(另:至于堆排序算法,前面已经有一篇文章针对堆排序的算法实现做了详细的描述) C++实现代码如下: /*******************************************************

深入理解golang的基本类型排序与slice排序_Golang

前言 其实golang的排序思路和C和C++有些差别. C默认是对数组进行排序, C++是对一个序列进行排序, Go则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个slice(分片, 类似于数组),或是包含 slice 的一个对象. 排序(接口)的三个要素:       1.待排序元素个数 n :       2.第 i 和第 j 个元素的比较函数 cmp :       3.第 i 和 第 j 个元素的交换 swap : 乍一看条件 3 是多余的, c 和 c++ 都不提供 swa