您的位置:首页 > 其它

zzuli--1812--sort(模拟水题)

2015-12-10 21:31 302 查看

1812: sort

Time Limit: 1 Sec  Memory Limit: 128 MB

Submit: 158  Solved: 30

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

这道题输入有点坑,其他都没啥

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<map>
using namespace std;
#define MAXN 200000
int a[MAXN],b[MAXN],c[MAXN];
int cmp(int a,int b)
{
return a>b;
}
int main()
{
int k,i=0;
char ch;
while(~scanf("%d",&a[++i]))
{
ch=getchar();
if(ch==' ') continue;
//如果两个数据之间是' '的话就继续输入,负责就开始操作
else
{
int ans=0,cnt=0;
for(int j=1;j<=i;j++)
{
if(j%2==0&&j%3!=0)
b[cnt++]=a[j];
else if(j%3==0)
c[ans++]=a[j];
}
sort(b,b+cnt);
sort(c,c+ans,cmp);
int m=0,n=0,flot=0;
for(int j=1;j<=i;j++)
{
if(flot)printf(" ");
else flot++;
if(j%2==0&&j%3!=0)
printf("%d",b[m++]);
else if(j%3==0)
printf("%d",c[n++]);
else printf("%d",a[j]);
}
printf("\n");
}
memset(a,0,sizeof(a));//数据还是清零的好,没清零错了两次
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
i=0;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: