POJ 2351-D - Time Zones

//POJ 2351D - Time Zones--- 这类问题统一转换成分钟(同一单位)来处理会方便很多
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
using namespace std;

double getadd(string a)
{
	if (a=="UTC" )   return 0;
	if (a=="GMT" )   return 0;
	if (a=="BST" )   return 1;
	if (a=="IST" )   return 1;
	if (a=="WET" )   return 0;
	if (a=="WEST" )   return 1;
	if (a=="CET" )   return 1;
	if (a=="CEST" )   return 2;
	if (a=="EET" )   return 2;
	if (a=="EEST" )   return 3;
	if (a=="MSK" )   return 3;
	if (a=="MSD" )   return 4;
	if (a=="AST" )   return -4;
	if (a=="ADT" )   return -3;
	if (a=="NST" )   return -3.5;
	if (a=="NDT" )   return -2.5;
	
	if (a=="EST" )   return -5;
	if (a=="EDT" )   return -4;
	if (a=="CST" )   return -6;
	if (a=="CDT" )   return -5;
	if (a=="MST" )   return -7;
	if (a=="MDT" )   return -6;
	if (a=="PST" )   return -8;
	if (a=="PDT" )   return -7;
	if (a=="HST" )   return -10;
	
	
	if (a=="AKST" )   return -9;
	if (a=="AKDT" )   return -8;
	if (a=="AEST" )   return 10;
	if (a=="AEDT" )   return 11;
	if (a=="ACST" )   return 9.5;
	if (a=="ACDT" )   return 10.5;
	if (a=="AWST" )   return 8; 
	
	
}
int change(int &apm)
{
	if (apm==1)
		apm=2;
	else
		apm=1;
	return 0;
}
int main()
{
	int i,j;
	int n,m,k;
	int t;
	cin>>t;
	while(t--)
	{
		string tim;
		string timezone1;
		string timezone2;
		int shi;
		int fen;
		int ti;
		int apm;
		int mark=0;
		cin>>tim;
		if (tim=="noon") 
			ti=12*60;  
		else
			if (tim=="midnight") 
				ti=0; 
			else
			{ 
				if (tim[1]==':')
				{
					shi=tim[0]-'0';
					fen=(tim[2]-'0')*10+tim[3]-'0';	
				}
				else
				{
					shi=10*(tim[0]-'0')+tim[1]-'0';
					fen=10*(tim[3]-'0')+tim[4]-'0';
				}
				cin>>tim;
				if (tim[0]=='a')
				{
				 
					if (shi==12) 
						ti=fen;
					else
						ti=shi*60+fen;
				}
				else
				{
					 
				if (shi==12) 
						ti=12*60+fen;
					else
						ti=12*60+shi*60+fen;
				}
			 
			}
			cin>>timezone1;
			cin>>timezone2;
			double t1=getadd(timezone1);
			double t2=getadd(timezone2);
			double tt=t2-t1;
			if (tt<0)
				tt+=24;
			int ans=ti+int(tt*60);
			if (ans>24*60)
				ans-=24*60;
		 
				if (ans%(24*60)==0)
				printf("midnight\n");
			else
				if (ans==12*60)
					printf("noon\n");
				else
					if (ans<60)
						printf("12:%02d a.m.\n",ans);
					else
						if (ans<12*60)
							printf("%d:%02d a.m.\n",ans/60,ans%60);
						else
							if (ans<12*60+60)
								printf("12:%02d p.m.\n",ans%60);
							else
								printf("%d:%02d p.m.\n",ans/60-12,ans%60);
			
		   
	}
	
	
	return 0;
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值