ZZULIOJ 1812: sort (字符串乱搞)

来源:互联网 发布:数据库安全性控制 编辑:程序博客网 时间:2024/05/18 03:25

1812: sort

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

SubmitStatusWeb 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;}


0 0
原创粉丝点击