F:百科蝌蚪团
时间限制:
1000ms
内存限制:
65536kB
描述
百度百科有一支神奇的队伍,他们叫自己“百科蝌蚪团”。为了更好的让蝌蚪团的成员们安排工作,百度百科的运营团队定出了一个24小时制的时间表。例如:
1. 每个蝌蚪团成员工作时长相同;
2. 必须安排蝌蚪团成员在他们方便的时间段工作;
3. 蝌蚪团成员安排时间最小安排时间节点(开始工作或停止工作)为半小时,比如04:00或04:30,而不是04:15;
4. 蝌蚪团成员一天在百度百科工作的时间是有上限的,他们会根据自己的情况给出上限。
5. 在特定时间段内必须有一定数量的蝌蚪团成员工作,以保证百度百科不断的进步
请帮运营团队计算一下,能保持24小时稳定在岗的蝌蚪团最少成员的数量。如果有2个蝌蚪团成员工作结束,同时另2个蝌蚪团成员开始工作,这段时间都算有2各成员稳定在岗。
输入
输入有多组,每组测试数据以一个整数N开头(1 ≤ N ≤ 50),表示蝌蚪团的成员数。紧接着,我们会有N个数据块,每一个数据块对应了一名蝌蚪团成员的日程情况。
每个数据块以两个整数开始,分别为K(1 ≤ K ≤ 50)和M(1 ≤ M ≤ 1440),用空格隔开。K表示这个数据块对应蝌蚪团成员方便的时间段的数量,M表示这个成员愿意每天在百度百科工作的最长分钟数。接下去的K行中,每行包括两个时间,分别表示成“HH:MM”的格式,以空格分隔,分别对应了该蝌蚪团成员一个方便的时间段的开始时间、结束时间;例如09:00 10:00表明他在早上九点到十点的时间段是方便的,可以在百度百科工作。如果两个时间相同,则说明这个他全天都是方便的。
最后一组数据的N为0,表示输入结束。
输出
对于每组数据,输出为一个整数,占一行。表示能保持24小时稳定在岗的蝌蚪团最少成员的数量。
样例输入
5
1 720
18:00 12:00
1 1080
00:00 23:00
1 1080
00:00 20:00
1 1050
06:00 00:00
1 360
18:00 00:00
3
1 540
00:00 00:00
3 480
08:00 10:00
09:00 12:00
13:00 19:00
1 420
17:00 00:00
3
1 1440
00:00 00:00
1 720
00:00 12:15
1 720
12:05 00:15
0
样例输出
2
1
1
【答案未通过】
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(void)
{
intblockNums = 0;
intcountOfTimeSegment = 0; //k
intmaxMinutesOfMember = 0; //m
stringbeginTimeOfMember; //beginTime
stringendTimeOfMember; //endTime
int*pBlockArr = NULL;
int*pMaxMinute = NULL;
pair<string,string> timePairs;
vector<pair<string,string> > tVec;
vector<pair<string,string> >::iterator iter;
boolbOnlyOne = false;
intminMemberCnt = 0; //输出结果,最小成员数...
while(cin >> blockNums )
{
if(blockNums== 0)
{
break;
}
pBlockArr= new int[blockNums];
pMaxMinute= new int[blockNums];
for(int i=0; i< blockNums; i++ )
{
cin>> pBlockArr[i] >> pMaxMinute[i];
if(pBlockArr[i] != 0)
{
for(int j = 0; j < pBlockArr[i]; j++)
{
cin>> beginTimeOfMember >> endTimeOfMember;
timePairs= make_pair(beginTimeOfMember,endTimeOfMember);
tVec.push_back(timePairs);
iter= tVec.begin();
while( iter != tVec.end() )
{
if(iter->first== iter->second)
{
minMemberCnt= 1;
bOnlyOne= true;
break;
}
++iter;
}
}
}//endif
}//endfor
if(!bOnlyOne)
{
intiSize = tVec.size();
cout<< "iSize = " << iSize << endl;
inttempVal = 0;
intiCnt = 0;
for(int i = 0; i < iSize; i++ )
{
if((tVec[i].first == "00:00") || (tVec[i].second == "00:00") )
{
++iCnt;
tempVal+= pMaxMinute[i];
if(tempVal>= 24*60)
{
break;
}
}
}
minMemberCnt= iCnt;
}
cout<< minMemberCnt << endl;
}//endwhile
return0;
}
————————————————
版权声明:本文为CSDN博主「铭毅天下」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/laoyang360/article/details/7621246