poj 2051解题报告
2008-12-09 23:17
330 查看
这是我除了a+b外唯一秒杀的题.当然一次搞定是要付出代价的,看代码就知道了.这道题主要考的就是qsort的应用(又是qsort -_-!)另外波波觉得这道题比较有实际应用.
#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
#include <string.h>
//数据储存结构
typedef struct work{
int Q_number;
int period;
int lastTime;
} work;
work w1[1005],w2,w3[1005],*w4;
//qsort的比较函数
int compare(const void *p1,const void *p2)
{
work a=*(work *)p1;
work b=*(work *)p2;
if(a.period > b.period )
return 1;
else if(a.period == b.period && a.Q_number > b.Q_number )
return 1;
return -1;
}
int main()
{
int wCount = 0,j,i,k;
char s[20];
//初始化
while(gets(s) && s[0] != '#') {
sscanf(s,"Register %d%d",&w1[wCount].Q_number,&w1[wCount].period);
w1[wCount].lastTime = w1[wCount].period;
wCount++;
}
qsort(w1,wCount,sizeof(work),compare);
memcpy(w3,w1,wCount*sizeof(work));
scanf("%d",&k);
for(i = 0; i < k; i++) {
printf("%d/n",w1[0].Q_number);
// 对数据进行更新
w1[0].lastTime += w1[0].period;
w2 = w1[0];
//将头元素按大小插入数组中,比较累赘
for( j = 1; j < wCount; j++)
if( w1[j].lastTime > w1[0].lastTime || ( w1[j].lastTime == w1[0].lastTime && w1[j].Q_number > w1[0].Q_number))
break;
memcpy(w3,w1 + 1, (j - 1) * sizeof(work));
w3[j-1] = w2;
memcpy(w1,w3,wCount*sizeof(work));
}
}
这道题相当的浪费空间和时间,不过还是比波波用c++写出来的代码快了100% ^_^
#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
#include <string.h>
//数据储存结构
typedef struct work{
int Q_number;
int period;
int lastTime;
} work;
work w1[1005],w2,w3[1005],*w4;
//qsort的比较函数
int compare(const void *p1,const void *p2)
{
work a=*(work *)p1;
work b=*(work *)p2;
if(a.period > b.period )
return 1;
else if(a.period == b.period && a.Q_number > b.Q_number )
return 1;
return -1;
}
int main()
{
int wCount = 0,j,i,k;
char s[20];
//初始化
while(gets(s) && s[0] != '#') {
sscanf(s,"Register %d%d",&w1[wCount].Q_number,&w1[wCount].period);
w1[wCount].lastTime = w1[wCount].period;
wCount++;
}
qsort(w1,wCount,sizeof(work),compare);
memcpy(w3,w1,wCount*sizeof(work));
scanf("%d",&k);
for(i = 0; i < k; i++) {
printf("%d/n",w1[0].Q_number);
// 对数据进行更新
w1[0].lastTime += w1[0].period;
w2 = w1[0];
//将头元素按大小插入数组中,比较累赘
for( j = 1; j < wCount; j++)
if( w1[j].lastTime > w1[0].lastTime || ( w1[j].lastTime == w1[0].lastTime && w1[j].Q_number > w1[0].Q_number))
break;
memcpy(w3,w1 + 1, (j - 1) * sizeof(work));
w3[j-1] = w2;
memcpy(w1,w3,wCount*sizeof(work));
}
}
这道题相当的浪费空间和时间,不过还是比波波用c++写出来的代码快了100% ^_^
相关文章推荐
- poj2051解题报告(优先队列)
- POJ 1657 解题报告
- POJ 1003解题报告
- POJ 1018 解题报告
- poj解题报告——3080
- POJ 1146 解题报告
- POJ 2159 解题报告
- POJ 1007解题报告
- POJ 4047 Garden (线段树 - 区间增减、区间查询) -- 解题报告
- poj 1192-最优连通子集解题报告
- poj1005 解题报告
- POJ 1157解题报告
- POJ 3356 AGTC 解题报告(Edit Distance,DP)
- 【简单题】POJ1032解题报告
- POJ 1001(浮点数高精度幂) 解题报告
- poj 2152解题报告
- POJ1118 解题报告JAVA
- POJ 1006(数论:同余式) 解题报告
- POJ 2255 Tree Recovery解题报告
- poj解题报告——1936