網際網路程式設計全國大賽 國中組初賽
C.外星時間
Problem ID: time
在一個遙遠的星球上,存在著一個神秘的外星文明。這個文明的發展程度並不高,比當前
的人類文明更為落後。其中一個值得注意的特點是,這個文明剛發展出自己的時間計數系統。
這個外星文明的時間計數系統如下:他們將一天分為 A 等分,為了方便,我們將每一等分
稱為一「外星小時」;每一「外星小時」再分為 B 等分,將每一等分稱為一「外星分鐘」;每一
「外星分鐘」再分為 C 等分,將每一等分稱為一「外星秒」。外星時間表示法則與地球上的時間
相似:將外星小時、外星分鐘、外星秒的十進位數值(沒有任何前置的 0)以冒號隔開,而一
天的第一個外星小時的數值是 0,最後一個外星小時的數值是 A − 1,而外星分鐘與外星秒的計
數方式也類似,都是從 0 開始並分別以 B − 1、C − 1 作為最後一個外星分鐘與外星秒。
由於這個外星文明的數學還沒有很先進,所以這些外星人還不知道如何對時間進行加法。
為了展示人類文明的先進,請你寫一個程式計算外星時間的加法:給你一個外星時間,請計算
這個外星時間在經過 x 外星小時、y 外星分鐘又 z 外星秒之後會是甚麼外星時間?
Input
第一行有三個以空白隔開的正整數 A, B, C,意義如題目所述。
第二行有一個正整數 N,代表接下來有幾組外星時間加法的問題。
接下來的 N 行,每行有一個外星時間 S(以外星時間表示法表示)和三個非負整數 x, y, z,
代表一個外星時間加法的問題。
• N ≤ 105
• A, B, C ≤ 109
• S 是一個合法的外星時間表示法,其中 S 含的外星小時、外星分鐘及外星秒都會在對應
的範圍之內
• x < A
• y < B
• z < C
Output
對於每個外星時間加法問題,請輸出一個以外星時間表示法表示的時間,代表 S 過了 x 外
星小時、y 外星分鐘又 z 外星秒的時間(以外星時間表示法表示)。
- #include <bits/stdc++.h>
- using namespace std;
- int main()
- {
- int A,B,C; //外星時間
- cin>>A>>B>>C; //ex:2 20 30
-
- int N; //N組外星時間加法的問題
- cin>>N; //ex:3
- char c1,c2; //:
-
- int x1,y1,z1; //是一個合法的外星時間表示法
- int x,y,z; //x, y, z,代表一個外星時間的加法
-
- for(int i=0;i<N;i++)
- {
- cin>>x1>>c1>>y1>>c2>>z1; //ex:1:19:2
- cin>>x>>y>>z; //ex:0 1 7
-
- z1=z1+z;
- if(z1>=C)
- {
- y1=y1+z1/C;
- z1=z1%C;
- }
-
- y1=y1+y;
- if(y1>=B)
- {
- x1=x1+y1/B;
- y1=y1%B;
- }
- x1=x1+x;
- if(x1>=A)
- {
- x1=x1%A;
- }
- cout<<x1<<":"<<y1<<":"<<z1<<"\n";
- }
- }
複製代碼 |