C小加

厚德 博学 求真 至善 The bright moon and breeze
posts - 145, comments - 195, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

hdu 4163 Stock Prices 解题报告

Posted on 2012-03-06 10:48 C小加 阅读(1251) 评论(0)  编辑 收藏 引用 所属分类: 解题报告

水题。

题意:给你每天的股价,让你找出最小的K1个股价,然后按日期从小到大排序输出,找出最大的k2个股价,按日期从大到小输出。

 

我用了4sort


#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef struct
{
    int p,d;
}Data;
Data dt[1000003];

bool cmp1(Data d1,Data d2)
{
    if(d1.p==d2.p) return d1.d<d2.d;
    return d1.p<d2.p;
}
bool cmp2(Data d1,Data d2)
{
    if(d1.p==d2.p) return d1.d>d2.d;
    return d1.p>d2.p;
}
bool cmp3(Data d1,Data d2)
{
     return d1.d<d2.d;
}
bool cmp4(Data d1,Data d2)
{
     return d1.d>d2.d;
}
void print()
{
    static int cnt=0;
    printf("Case %d\n",++cnt);
}
int main()
{
    int n,k1,k2;
    while(scanf("%d %d %d",&n,&k1,&k2),n&&k1&&k2)
    {
        for(int i=0;i<n;i++)
        {
            scanf("%d",&dt[i].p);
            dt[i].d=i+1;
        }
        sort(dt,dt+n,cmp1);//从小到大排序
        print();//忽略
        sort(dt,dt+k1,cmp3);//日期的字典序从小到大
        printf("%d",dt[0].d);
        for(int i=1;i<k1;i++)
        printf(" %d",dt[i].d);
        printf("\n");
        sort(dt,dt+n,cmp2);//从大到小排序
        sort(dt,dt+k2,cmp4);//日期的字典序从大到小
        printf("%d",dt[0].d);
        for(int i=1;i<k2;i++)
        printf(" %d",dt[i].d);
        printf("\n");

    }
    return 0;
}

 


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理