程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> hdu4509 湫湫系列故事——減肥記II (離散化思想)

hdu4509 湫湫系列故事——減肥記II (離散化思想)

編輯:關於C++

Problem Description

 

  雖然制定了減肥食譜,但是湫湫顯然克制不住吃貨的本能,根本沒有按照食譜行動!
於是,結果顯而易見…
  但是沒有什麼能難倒高智商美女湫湫的,她決定另尋對策——吃沒關系,咱吃進去再運動運動消耗掉不就好了?
  湫湫在內心咆哮:“我真是天才啊~(≧▽≦)/~”

  可是,大家要知道,過年回家多忙啊——幫忙家裡做大掃除,看電影,看小說,高中同學聚餐,初中同學聚餐,小學同學聚餐,吃東西,睡覺,吃東西,睡覺,吃東西,睡覺……所以鍛煉得抽著時間來。

  但是,湫湫實在太忙了,所以沒時間去算一天有多少時間可以用於鍛煉,現在她把每日行程告訴你,拜托你幫忙算算吧~

  皮埃斯:一天是24小時,每小時60分鐘 Input 輸入數據包括多組測試用例。
每組測試數據首先是一個整數n,表示當天有n件事要做。
接下來n行,第i行是第i件事的開始時間和結束時間,時間格式為HH:MM。

[Technical Specification]
1. 1 <= n <= 500000
2. 00 <= HH <= 23
3. 00 <= MM <= 59
Output 請輸出一個整數,即湫湫當天可以用於鍛煉的時間(單位分鐘) Sample Input
1
15:36 18:40
4
01:35 10:36
04:54 22:36
10:18 18:40
11:47 17:53
Sample Output
1256
179

題目分析:
將一天的時間看成1440分鐘,如果某一分鐘i已經占用,則vis[i]=1;對於每個時間段轉化為分鐘,判斷每一分鐘
是否占用,進行記錄即可,時間上能夠過去,最多為O(1440*n),哎,應該還有其他方法優化。

AC代碼:
/** *@xiaoran *模擬水題 */ #include #include #include#include #include #include #include #include #include #include #include #include #define LL long long using namespace std; const int sum=1440; int vis[1444];//記錄已經占用的時間,防止重復計算 int addtime(int h1,int m1,int h2,int m2){//計算時間 if(m2>=m1) return m2-m1+(h2-h1)*60; else return m2+60-m1+(h2-1-h1)*60; } int time(int h,int m){//轉化為分鐘 return h*60+m; } int Judge(int h1,int m1,int h2,int m2){//過濾已經占用時間 int s1,s2,res=0; s1=time(h1,m1); s2=time(h2,m2); //cout<
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved