ZZULIOJ 1812: sort (字符串乱搞)

1812: sort

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 178  Solved: 35

Submit Status Web Board

Description

想必大家对排序已经很熟悉了,但是spy好像对排序不太熟悉,有一天,他看到这样一个关于排序的题目:

对于 k 个用空格分隔开的整数,依次为 n1, n2 … nk。请将所有下标不能被 3 但可以被 2 整除的数在这些数字原有的位置上进行升序排列,此外,将余下下标能被 3 整除的数在这些数字原有的位置上进行降序排列。

spy想了半天不知道怎么排序,你可以帮助他么?

Input

多组数据,每组数据一行,为k个小于1000的正整数,依次为 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

很简单的一道题,坑点在于:里面会出现非数字的东西啊啊啊啊啊啊啊啊!!!!!!

ac代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stack>
#include<queue>
#include<map> 
#include<vector>
#define MAXN 1000010
#define LL long long
#define INF 0xfffffff
#define fab(x) (x)>0?(x):(-x)
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#include<iostream>
#include<algorithm>
using namespace std;
char s[MAXN];
int a[MAXN];
int b[MAXN];
int c[MAXN];
int num[MAXN];
bool cmp(int aa,int bb)
{
    return aa>bb;
}
int main()
{
    int i;
    int j=0;
    while(gets(s))
    {
        int len=strlen(s);
        int n=1;
        int k=1;
        mem(num);
        int bz=0;
        int flag=0;
        for(i=len-1;i>=0;i--)
        {
            if(s[i]==' ')
            {
                if(flag==0)
                continue;
                if(bz==0)
                {
                    bz=1;
                    k=1;
                    n++;
                } 
                continue;
            }
            flag=1;
            if(s[i]<'0'||s[i]>'9')
            continue;
            num[n]=k*(s[i]-'0')+num[n];
            k*=10;
            bz=0;
        }
        if(s[0]==' '&&num[n]==0)
        n=n;
        else
        n++;
        for(i=1;i<n;i++)
        a[i]=num[n-i];
        int cnt1=0;
        int cnt2=0;
        for(i=1;i<n;i++)
        {
            if(i%2==0&&i%3)
            {
                b[cnt1]=a[i];
                cnt1++;
            }
            else if(i%3==0) 
            {
                c[cnt2]=a[i];
                cnt2++;
            }
        }
        sort(b,b+cnt1,cmp);
        sort(c,c+cnt2);
        cnt1--;cnt2--;
        for(i=1;i<n;i++)
        {
            if(i%2==0&&i%3)
            printf(i==n-1?"%d\n":"%d ",b[cnt1--]);
            else if(i%3==0)
            printf(i==n-1?"%d\n":"%d ",c[cnt2--]);
            else
            printf(i==n-1?"%d\n":"%d ",a[i]);
        }
    }
    return 0;
}


你可能感兴趣的:(ZZULIOJ 1812: sort (字符串乱搞))