1. 程式人生 > >nyoj 非洲小孩

nyoj 非洲小孩

def 非洲 內存 stream truct 為什麽 tdi 升序 一行

非洲小孩

時間限制:1000 ms | 內存限制:65535 KB 難度:2
描述
家住非洲的小孩,都很黑。為什麽呢?
第一,他們地處熱帶,太陽輻射嚴重。
第二,他們不經常洗澡。(常年缺水,怎麽洗澡。)
現在,在一個非洲部落裏,他們只有一個地方洗澡,並且,洗澡時間很短,瞬間有木有!!(這也是沒有的辦法,缺水啊!!)
每個小孩有一個時間段能夠洗澡。並且,他們是可以一起洗的(不管你是男孩是女孩)。
那麽,什麽時間洗澡,誰應該來洗,由誰決定的呢?那必然是他們偉大的“澡”神啊。“澡”神有一個時間表,記錄著該部落的小孩,什麽時候段可以洗澡。現在,“澡”神要問你,一天內,他需要最少開啟和關閉多少次洗澡的水龍頭呢?因為,開啟和關閉一次水龍頭是非常的費力氣的,即便,這也是瞬間完成的。
輸入
多組數據
第一行一個0<n<=100。
接下來n行,每行一個時間段。H1H1:M1M1-H2H2:M2M2,24小時制。
保證該時間段是在一天之內的。但是,不保證,H1H1:M1M1先於H2H2:M2M2。
輸出
題目描述,“澡”神最少需要開啟和關閉多少次水龍頭呢?
樣例輸入
1
00:12-12:12
3
00:12-13:14
13:13-18:00
17:00-19:14
樣例輸出
1
2
提示
Ps:開啟和關閉為一次

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

typedef struct
{
int first,last;
}Person;

bool cmp(Person p1,Person p2)
{
if(p1.last!=p2.last)
return p1.last<p2.last;
return p1.first<p2.first;
}

int main()
{
int n;
while(cin>>n)
{
Person p[100];
int a,b,c,d;
string s;
for(int i=0;i<n;i++)
{
//cin>>a>>":">>b>>c>>d;
scanf("%d:%d-%d:%d",&a,&b,&c,&d);//輸入時按“”裏面的分割符輸入
p[i].first=a*60+b;//把開始的時間轉換為分鐘
p[i].last=c*60+d;//把結束的時間轉換為分鐘
if(p[i].first>p[i].last)
swap(p[i].first,p[i].last);//保證開始的時間小於結束的時間
}

sort(p,p+n,cmp); //把每個人的結束在時間升序排列
int sum=1;
int temp=p[0].last;
for(int i=1;i<n;i++)
{
if(temp<p[i].first) //如果前一個人的結束的時間小於開始的時間, 則需要一次開關,sum++;
{
temp=p[i].last;
sum++;
}
}

cout<<sum<<endl;
}
return 0;
}

nyoj 非洲小孩