技术经验分享:HDU1234开门人和关门人

简介: 技术经验分享:HDU1234开门人和关门人

问题链接:HDU1234 开门人和关门人。


问题简述:参见上述链接。


问题分析:这个问题不是很困难,还是可以锻炼人处理输入输出的能力。


解决问题时,做两个排序,就可以找出开门的人和关门的人。程序中时间转换为整数(秒单位),以便比较排序。


程序说明:这里同时给出C和C++的程序。


C和C++的排序库程序不一样,分别是qsort()和sort,参数不同,比较程序形式上也不一样。


一些细节还是需要注意的,C++程序中的比较函数,参数是常量和引用。


另外,在出来格式化输入方面,还是C语言有优势,所以C++程序中使用C语言的代码处理输入。


这两个程序都不是最佳解法,参见以下的链接。


参考链接:HDU1234 开门人和关门人(解法二)。其中的程序一边读入数据一边计算开门人和关门人,省去结构数组。


AC通过的C语言程序如下:


/ HDU1234 开门人和关门人 /


#include


#include


struct node


{


char name【20】;


int starttime;


int endtime;


} record【1000】;


int cmp1(const void a, const void b)


{


struct node x = (struct node ) a;


struct node y = (struct node ) b;


return x->starttime - y->starttime;


}


int cmp2(const void a, const void b)


{


struct node x = (struct node ) a;


struct node y = (struct node ) b;


return y->endtime - x->endtime;


}


int main(void)


{


int n, m, i;


int h, mi, s;


// 读入总天数(测试组//代码效果参考:http://www.lyjsj.net.cn/wx/art_22994.html

数)

scanf("%d", &n);


while(n--) {


// 读入记录数


scanf("%d", &m);


// 读入各个记录


for(i=0; i

scanf("%s %d:%d:%d", record【i】.name, &h, &mi, &s);


record【i】.starttime = s + mi 60 + h 3600;


scanf("%d:%d:%d", &h, &mi, &s);


record【i】.endtime = s + mi 60 + h 3600;


}


// 排序(按开门时间)


qsort(record, m, sizeof(record【0】), cmp1);


// 输//代码效果参考:http://www.lyjsj.net.cn/wz/art_22992.html

出开门人名字

printf("%s ",record【0】.name);


// 排序(按关门时间)


qsort(record, m, sizeof(record【0】), cmp2);


printf("%s\n",record【0】.name);


}


return 0;


}


AC通过的C++语言程序如下:


/ HDU1234 开门人和关门人 /


#include


#include


#include


using namespace std;


struct node


{


char name【20】;


int starttime;


int endtime;


} record【1000】;


bool cmp1(const node& a, const node& b)


{


return a.starttime b.endtime;


}


int main()


{


int n, m;


int h, mi, s;


// 读入总天数(测试组数)


cin ] n;


while(n--) {


// 读入记录数


cin ] m;


// 读入各个记录


for(int i=0; i

scanf("%s %d:%d:%d", record【i】.name, &h, &mi, &s);


record【i】.starttime = s + mi 60 + h 3600;


scanf("%d:%d:%d", &h, &mi, &s);


record【i】.endtime = s + mi //代码效果参考:http://www.lyjsj.net.cn/wz/art_22990.html

60 + h 3600;

}


// 排序(按开门时间)


sort(record, record + m, cmp1);


// 输出开门人名字


cout [ record【0】.name [ " ";


// 排序(按关门时间)


sort(record, record + m, cmp2);


cout [ record【0】.name [ endl;


}


return 0;


}

相关文章
|
8月前
|
运维 监控 数据安全/隐私保护
绝地反击,不做背锅侠!
那么作为运维人员,如何摆脱以上背黑锅的尴尬局面呢?堡垒机当然是破解此局面的绝杀大招。
67 0
|
8月前
|
存储 安全 vr&ar
【周末闲谈】VR新视界,“眼”见未来
【周末闲谈】VR新视界,“眼”见未来
95 0
|
JavaScript 前端开发 中间件
扶我起来,前端还没倒下,我不能睡
扶我起来,前端还没倒下,我不能睡
|
算法 C++
【每日算法Day 65】你能顺利救出地下城里的公主吗?
【每日算法Day 65】你能顺利救出地下城里的公主吗?
端午还在“修锁”?你是真的卷王!(二)
今天为你带来的是 ReentrantLock 公平锁与非公平锁的源码分析,它是 Java 并发包下的一个 java.util.concurrent.locks 实现类,实现了 Lock 接口和 Serializable 接口。
端午还在“修锁”?你是真的卷王!(二)
端午还在“修锁”?你是真的卷王!(一)
哈喽,大家好,我是指北君。 今天为你带来的是 ReentrantLock 公平锁与非公平锁的源码分析,它是 Java 并发包下的一个 java.util.concurrent.locks 实现类,实现了 Lock 接口和 Serializable 接口。
端午还在“修锁”?你是真的卷王!(一)
A计划救公主
可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。
191 0
我被阿里云美女清宵的观后感给撩了
这是她看完药神之后的观后感,看到chanel的声明,就吸引我一直把它读完。 package main import ( "fmt" "math/rand" "sync" "time" ) var ( r = rand.
1604 0