1.鏈接:http://poj.grids.cn/practice/2966/
2.題目:
- 總時間限制:
- 1000ms
- 內存限制:
- 65536kB
- 描述
- 直到19世紀,時間校准是一個純粹的地方現象。每一個村莊當太陽升到最高點的時候把他們的時鐘調到中午12點。一個鐘表制造商人家或者村裡主 表的時間被認為是官方時間,市民們把自家的鐘表和這個時間對齊。每周一些熱心的市民會帶著時間標准的表,游走大街小巷為其他市民對表。在城市之間旅游的 話,在到達新地方的時候需要把懷表校准。但是,當鐵路投入使用之後,越來越多的人頻繁地長距離地往來,時間變得越來越重要。在鐵路的早期,時刻表非常讓人 迷惑,每一個所謂的停靠時間都是基於停靠地點的當地時間。時間的標准化對於鐵路的高效運營變得非常重要。
在1878年,加拿大人Sir Sanford Fleming 提議使用一個全球的時區(這個建議被采納,並衍生了今天我們所使用的全球時區的概念),他建議把世界分成24個時區,每一個跨越15度經線(因為地球的經 度360度,劃分成24塊後,一塊為15度)。Sir Sanford Fleming的方法解決了一個全球性的時間混亂的問題。
美國鐵路公司 於1883年11月18日使用了Fleming 提議的時間方式。1884年一個國際子午線會議在華盛頓召開,他的目的是選擇一個合適的本初子午線。大會最終選定了格林威治為標准的0度。盡管時區被確定 了下來,但是各個國家並沒有立刻更改他們的時間規范,在美國,盡管到1895年已經有很多州開始使用標准時區時間,國會直到1918年才強制使用會議制定 的時間規范。
今天各個國家使用的是一個Fleming時區規范的一個變種,中國一共跨越了5個時區,但是使用了一個統一的時間規范,比 Coordinated Universal Time(UTC,格林威制時間)早8個小時。俄羅斯也擁護這個時區規范,盡管整個國家使用的時間和標准時區提前了1個小時。澳大利亞使用3個時區,其中 主時區提前於他按Fleming規范的時區半小時。很多中東國家也使用了半時時區(即不是按照Fleming的24個整數時區)。
因為時區是對經度進行劃分,在南極或者北極工作的科學家直接使用了UTC時間,否則南極大陸將被分解成24個時區。
時區的轉化表如下:
UTC Coordinated Universal Time
GMT Greenwich Mean Time, 定義為 UTC
BST British Summer Time, 定義為 UTC+1 hour
IST Irish Summer Time, 定義為 UTC+1 hour
WET Western Europe Time, 定義為 UTC
WEST Western Europe Summer Time, 定義為 UTC+1 hour
CET Central Europe Time, 定義為 UTC+1
CEST Central Europe Summer Time, 定義為 UTC+2
EET Eastern Europe Time, 定義為 UTC+2
EEST Eastern Europe Summer Time, 定義為 UTC+3
MSK Moscow Time, 定義為 UTC+3
MSD Moscow Summer Time, 定義為 UTC+4
AST Atlantic Standard Time, 定義為 UTC-4 hours
ADT Atlantic Daylight Time, 定義為 UTC-3 hours
NST Newfoundland Standard Time, 定義為 UTC-3.5 hours
NDT Newfoundland Daylight Time, 定義為 UTC-2.5 hours
EST Eastern Standard Time, 定義為 UTC-5 hours
EDT Eastern Daylight Saving Time, 定義為 UTC-4 hours
CST Central Standard Time, 定義為 UTC-6 hours
CDT Central Daylight Saving Time, 定義為 UTC-5 hours
MST Mountain Standard Time, 定義為 UTC-7 hours
MDT Mountain Daylight Saving Time, 定義為 UTC-6 hours
PST Pacific Standard Time, 定義為 UTC-8 hours
PDT Pacific Daylight Saving Time, 定義為 UTC-7 hours
HST Hawaiian Standard Time, 定義為 UTC-10 hours
AKST Alaska Standard Time, 定義為 UTC-9 hours
AKDT Alaska Standard Daylight Saving Time, 定義為 UTC-8 hours
AEST Australian Eastern Standard Time, 定義為 UTC+10 hours
AEDT Australian Eastern Daylight Time, 定義為 UTC+11 hours
ACST Australian Central Standard Time, 定義為 UTC+9.5 hours
ACDT Australian Central Daylight Time, 定義為 UTC+10.5 hours
AWST Australian Western Standard Time, 定義為 UTC+8 hours
下面給出了一些時間,請在不同時區之間進行轉化。- 輸入
- 輸入的第一行包含了一個整數N,表示有N組測試數據。接下來N行,每一行包括一個時間和兩個時區的縮寫,它們之間用空格隔開。時間由標准的a.m./p.m給出。midnight表示晚上12點(12:00 a.m.),noon表示中午12點(12:00 p.m.)。
- 輸出
- 假設輸入行給出的時間是在第一個時區中的標准時間,要求輸出這個時間在第二個時區中的標准時間。
- 樣例輸入
4 noon HST CEST 11:29 a.m. EST GMT 6:01 p.m. CST UTC 12:40 p.m. ADT MSK- 樣例輸出
midnight 4:29 p.m. 12:01 a.m. 6:40 p.m.
3.代碼:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> zone[][] = {,,,,, ,,,, ,,,, ,,,, ,,,, ,,,, m_time[] = {,,,,,,,,,,,,-,-,-,-,-,-,-,-,- -,-,-,-,-,-,,,,, cin>> chs[ ch1[],zone1[],zone2[ (n-- (chs[] == sscanf(chs, thour = tminute = (chs[] == sscanf(chs, thour = tminute = sscanf(chs,,&thour,& thour %= (ch1[] == ) thour += minute = thour * + ( i = ; i < ; i++ (!strcmp(zone[i],zone1)) m_idx1 = (!strcmp(zone[i],zone2)) m_idx2 = diff_zone = m_time[m_idx2] - minute += ()(diff_zone * (minute < ) minute += minute %= thour = minute / tminute = minute % (thour == && tminute == ) printf( (thour == ) printf( (thour < ) printf( (thour == && tminute == ) printf( (thour == ) printf( printf(,thour- }
4.思路:
(1)一個不小心,錯了N多次
(2)此題目注意時間的表示,比如 12:01 a.m. 指的是凌晨0點01分,注意!這種還有很多要一一注意
(3)可以先轉成分鐘,然後再計算可以免除很多的麻煩