NPSC補完計劃

登入註冊帳號.

請輸入帳號, 密碼以及預計登入時間
進階搜尋  

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃 » NPSC國中組 » NPSC2004國中組初賽
 C 現在幾點

作者 主題: C 現在幾點  (閱讀 504 次)

rscpp

  • 中級會員
  • ***
  • 文章數: 60
    • 檢視個人資料
C 現在幾點
« 於: 四月 19, 2015, 11:23:49 am »

時區名可能1個word或2個word 接著才是倒數的秒數,所以用 istringstream讀資料
另時區名轉成與倫敦的時差,以map實作
代碼: [選擇]
// npsc04-j1c (NPS 2004 國中初 C 現在幾點)
// 第1列 n ,接下來會有 N 行,每行會有一個城市 s 和一個數字 t,(城市名 X 可能由兩字串組成) 此城市還剩下 t 秒會結束這一天 ( 0 <= Y <= 86400 )
// 由城市名查map得出m小時,(-m*3600+8*3600)-t 換算台灣時間的秒數,避免負數+2個24*60*60之後再mod, 以 h m d 顯示
//
#include <iostream>
#include <map>
#include <sstream>
#include <cstring>
using namespace std;
map<string , int> tmap;
void init()  // 建時區表查詢用 map
{
tmap["London"] = 0; tmap["Playa"] = -1; tmap["Trinidade"] = -2;
tmap["San Diego"] = -3; tmap["Hamilton"] = -4; tmap["New York"] = -5;
tmap["Chicago"] = -6; tmap["New Mexico"] = -7 ; tmap["Los Angeles"] = -8;
tmap["Anchorage"] = -9; tmap["Hawaii"] = -10; tmap["Midway Island"] = -11;
tmap["Vienna"] = 1; tmap["Athens"] = 2; tmap["Moscow"] = 3 ;
tmap["Abu Dhabi"] = 4 ; tmap["Islamabad"] = 5 ; tmap["Colombo"] = 6;
tmap["Bangkok"] = 7; tmap["Taiwan"] = 8; tmap["Tokyo"] = 9;
tmap["Melbourne"] = 10; tmap["Noumea"] = 11; tmap["Auckland"] = 12;
}
int main()
{
init();
int n,i,t,m;
string line,s[4];
cin >> n;   getline(cin,line);
while( n-- )
{
getline(cin,line);
istringstream ss(line);
i=0;
while( ss >> s[i])++i;
if(i==3)
{
  istringstream st(s[2]);
  m=tmap[(s[0]+" "+s[1])];
  st >> t;
}else{
  istringstream st(s[1]);
  m=tmap[s[0]];
  st >> t;
}
t=(201600-m*3600-t)%86400;  // 28800+86400+86400 = 201600
cout << t/3600 << " " << (t%3600)/60 << " " << t%60 << endl;
}
  return 0;
}
/*
------------------範例輸入:
5
London 100
Hawaii 1000
San Diego 1234
Midway Island 86300
Auckland 85200
----------------範例輸出:
7 58 20
17 43 20
10 39 26
19 1 40
20 20 0
*/
« 上次編輯: 四月 19, 2015, 02:16:45 pm 由 rscpp »
記錄
+ NPSC補完計劃 » NPSC國中組 » NPSC2004國中組初賽
 C 現在幾點