POJ 3784 Running Median简单版本可AC

来源:互联网 发布:杭州炎魂网络 编辑:程序博客网 时间:2024/05/01 15:15

题目链接:点击打开链接

题目描述: 第一行是测试数据个数;

之后一行是 测试组号 和 一个整数M 1—9999

之后一行是M个数字 (32位有符号数字, 每行10个)

输出为 组号和中位数的数目(M/2 +1) 

之后输出每个奇数下标 之前的数字序列的中位数 (每行10个)

题目解法:排序  


#include<algorithm>#include<string>#include<cmath>#include<cstdio>void run(){    int n,m;    scanf("%d%d",&n,&m);    int i,num[10001];    int ans[10001]={0};    int u = 2;    printf("%d %d\n",n,(m+1)/2);    scanf("%d",&num[1]);    ans[1]=num[1];    for(i=2;i<=m;i++)    {        int tmp,j,k;        scanf("%d",&tmp);        if(tmp<=num[1]) //比第一个小,则后面的往后移        {            for(k=i-1;k>=1;k--)            {                num[k+1]=num[k];            }            num[1]=tmp;        }        else if(tmp>=num[i-1]) //比最后一个大        {            num[i]=tmp;        }        else        {            bool f=false;            for(j=i-1;j>=1;j--)            {                if(tmp>=num[j-1] && tmp<=num[j]) //找要插入的位置位置                {                    f=true;                    int k;                    for(k=i-1;k>=j;k--)                    {                        num[k+1]=num[k];                    }                    num[j]=tmp;                }                if(f==true)                     break;            }        }        if(i%2==1) //记录奇数位置        {            ans[u++]=num[(i+1)/2];        }    }    for(i=1;i<u;i++)    {        if(i%10==0 || i==u-1)            printf("%d\n",ans[i]);        else            printf("%d ",ans[i]);    }}int main(){    int total;    scanf("%d",&total);    for(int now=1;now<=total;now++)        run();    return 0;}


0 0