ZZUOJ-10433: sort

Description

想必大家对排序已经很熟悉了,但是spy好像对排序不太熟悉,有一天,他看到这样一个关于排序的题目:
对于 k 个用空格分隔开的整数,依次为 n1, n2 … nk。请将所有下标不能被 3 但可以被 2 整除的数在这些数字原有的位置上进行升序排列,此外,将余下下标能被 3 整除的数在这些数字原有的位置上进行降序排列。
spy想了半天不知道怎么排序,你可以帮助他么?

Input

多组数据,每组数据一行,为k个整数,依次为 n1, n2 … nk。(1 <= k <= 100000)

Output

对于每组数据,输出排序后的结果。

Sample Input

1 3 4 2 10 6 8

Sample Output

1 2 6 3 10 4 8

今年郑大校赛的一道题,并不难,只是输入麻烦。
前两天在一本书上看的C++的stringstream类,感觉方便,于是就重新写了一遍,输入果然方便多了。
但是,书上也说了,stringstream用起来会有点慢,要慎用!但是对这一题而言,并没有超时~~
C++stringstream的用法
代码如下:

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <sstream>
#include <cstring>
#include <algorithm>
#define N 100009
using namespace std;
int num[N];
void Sort(int n)
{
    int t;
    for (int i = 1; i < n; i++)
    {
        if (i%3 && (i%2==0))
        {
            for (int j = i+1; j <= n; j++)
            {
                if (j%3 && (j%2==0))
                {
                    if (num[i] > num[j])
                    {
                        t = num[i];
                        num[i] = num[j];
                        num[j] = t;
                    }
                }
            }
        }
        else if(i%3 == 0)
        {
            for (int j = i+1; j <= n; j++)
            {
                if((j%3==0) && num[i] < num[j])
                {
                    t = num[i];
                    num[i] = num[j];
                    num[j] = t;
                }
            }
        }
    }
}
int main()
{
    string s;
    int i, a, n;
    while(getline(cin, s))
    {
        stringstream stream(s);
        i = 1;
        while(stream >> a)
            num[i++] = a;
        n = i - 1;
        Sort(n);
        for (i = 1; i < n; i++)
            cout << num[i] << ' ';
        cout << num[i] << endl; 
    }
    return 0;
}

你可能感兴趣的:(ZZUOJ-10433: sort)