Posted on 2012-03-06 10:48
C小加 閱讀(1261)
評論(0) 編輯 收藏 引用 所屬分類:
解題報告
水題。
題意:給你每天的股價,讓你找出最小的K1個股價,然后按日期從小到大排序輸出,找出最大的k2個股價,按日期從大到小輸出。
我用了4個sort。
#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;
}