栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

2009 ACM-ICPC世界总决赛带来的飞机调度挑战

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2009 ACM-ICPC世界总决赛带来的飞机调度挑战

我会做这样的事情:

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef uint MASK;#define INPUT_SCALE 60#define MAX_TIME (1440 * 60)void readPlaneData(int& endTime, MASK landingMask[MAX_TIME], int index){    char buf[128];    gets(buf);    int start, end;    sscanf(buf, "%d %d", &start, &end);    for(int i=start * INPUT_SCALE; i<=end * INPUT_SCALE; i++)        landingMask[i] |= 1 << index;    if(end * INPUT_SCALE > endTime)        endTime = end * INPUT_SCALE;}int findNextLandingForPlane(MASK landingMask[MAX_TIME], int start, int index){    while(start < MAX_TIME)    {        if(landingMask[start] & (1 << index)) return start;        start++;    }    return -1;}bool canLandPlanes(int minTime, MASK landingMask[MAX_TIME], int planeCount){    int next = 0;    for(int i=0; i<planeCount; i++)    {        int nextForPlane = findNextLandingForPlane(landingMask, next, i);        if(nextForPlane == -1) return false;        next = nextForPlane + minTime;    }    return true;}int main(int argc, char* argv[]){    while(true)    {        char buf[128];        gets(buf);        int count = atoi(buf);        if(count == 0) break;        MASK landingMask[MAX_TIME];        memset(landingMask, 0, sizeof(landingMask));        int endTime = 0;        for(int i=0; i<count; i++) readPlaneData(endTime, landingMask, i);        while((endTime > 0) && !canLandPlanes(endTime, landingMask, count)) endTime--;        printf("%d:%02dn", endTime / 60, endTime % 60);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427702.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号