ジェゴの私房の問題--時区間の時間の転換


問題の記述は19世紀まで、時間較正は純粋な地方現象だった.どの村も太陽が最高点に昇ったとき、彼らの時計を昼12時に変えた.ある時計メーカーの家や村の時計の時間は公式の時間とされ、市民たちは自分の時計をこの時間に合わせた.毎週、熱心な市民が時間基準の時計を持って、大通りや路地を泳いで他の市民のために時計を合わせます.都市間を旅行する場合は、新しい場所に着くときに懐中時計を校正する必要があります.しかし、鉄道が投入されると、頻繁に長距離を行き来する人が増え、時間がますます重要になってきた.鉄道の初期には時刻表が迷い、いわゆる停車時間は停車場所の現地時間に基づいていた.時間の標準化は鉄道の効率的な運営にとって非常に重要になっている.1878年にはカナダ人のSir Sanford Flemingは、世界のタイムゾーン(この提案が採択され、今日私たちが使用しているグローバルタイムゾーンの概念が派生した)を使用することを提案し、世界を24のタイムゾーンに分け、15度の経線を越えることを提案した.(地球の経度360度のため、24ブロックに分割された後、1ブロックは15度)Sir Sanford Flemingの方法は世界的な時間混乱の問題を解決した.アメリカの鉄道会社は1883年11月18日にFlemingが提案した時間方式を使用した.1884年に国際子午線会議がワシントンで開催され、彼の目的は適切な本初子午線を選択することである.大会は最終的にグリニッジを基準とした0度を選定した.タイムゾーンが確定したにもかかわらず、各国はすぐに時間規範を変更していない.米国では1895年までに多くの州が標準タイムゾーンの使用を開始したにもかかわらず、国会は1918年まで会議が制定した時間規範を強制的に使用した.今日各国で使われているのはFlemingタイムゾーン規範の変種で、中国は全部で5つのタイムゾーンを越えましたが、統一的な時間規範を使っています.Coordinated Universal Time(UTC、グリムウェイ時間)より8時間早い.ロシアもこのタイムゾーン仕様を擁護している.国全体で使用された時間と標準タイムゾーンが1時間繰り上げられたにもかかわらず.オーストラリアでは3つのタイムゾーンが使用されており、そのうちメインタイムゾーンはFleming仕様のタイムゾーンより30分繰り上げられている.多くの中東諸国でもハーフタイムゾーンが使用されている(すなわち、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 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+0.5 hours AWST Australian Western Standard Timeとして定義し、UTC+8 hoursの下に時間が与えられますので、異なる領域間で変換してください.入力データ入力の最初の行には、N組のテストデータがあることを示す整数Nが含まれている.次のN行は、各行に1つの時間と2つのタイムゾーンの略語が含まれ、それらの間にスペースで区切られています.時間は標準のa.m./p.mによって与えられる.midnightは夜12時(12:00 a.m.)、noonは昼12時を表します(12:00 p.m.).出力要求入力行が与える時間が第1タイムゾーンにおける標準時間であると仮定し、この時間が第2タイムゾーンにおける標準時間の出力を要求する.入力サンプル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.
#include 

int diff(char* zone1, char* zone2){
	char* zone[32]={"UTC","GMT","BST","IST","WET","WEST",
"CET","CEST","EET","EEST","MSK","MSD","AST","ADT","NST","NDT",
"EST","EDT","CST","CDT","MST","MDT","PST","PDT","HST","AKST",
"AKDT","AEST","AEDT","ACST","ACDT","AWST"};
	float time[32]={0,0,1,1,0,1,1,2,2,3,3,4,-4,-3,-3.5,-2.5,-5,-4,-6,-5,-7,13. -6,-8,-7,-10,-9,-8,10,11,9.5,10.5,8};
	int i = 0 ,j = 0;
	while(strcmp(zone[i], zone1))
		i++;
	while(strcmp(zone[j], zone2))
		j++;
	return (time[i]- time[j]) * 60;
}


int main(){
	int nCases;
	scanf("%d", &nCases);
	while(nCases --){
		char time[10];
		int hours, minutes;
		scanf("%s", time);
		switch(time[0]){
			case 'n': hours = 12;
				  minutes = 0;break;
			case 'm': hours = 0;
				  minutes = 0;break;
			default: sscanf(time, "%d:%d", &hours, &minutes);
				 hours %= 12;
				 scanf("%s", time);
				 if(time[0] == 'p') hours += 12;
		}
		char timezone[5], timezoneT[5];
		scanf("%s%s", timezone, timezoneT);
		int newTime;
		newTime = hours * 60 + minutes + diff(timezoneT,timezone);
		if(newTime < 0) newTime += 1440;
		newTime %= 1440;
		switch(newTime){
			case 0: printf("midnight
"); break; case 720: printf("noon"); break; default: hours = newTime /60; minutes = newTime % 60; if(hours == 0) printf("12:%02d a.m
", minutes); else if(hours < 12) printf("%d:%02d a.m
", hours, minutes); else if(hours == 12) printf("12:%02d p.m
", minutes); else printf("%d:%02d p.m
", hours % 12,minutes); } } return 0; }