如果你是第一次看到伯樂線上程式設計挑戰,請點選這裡檢視《伯樂線上程式設計挑戰簡介》。
本期程式設計挑戰的詳細描述如下。
規則
程式語言無限制,提交週期是48小時。請在評論中提交程式碼。通過評論提交程式碼後不會立即公開,48小時過後,我們把大家的評論統一公開。更多規則請參見《伯樂線上程式設計挑戰簡介》
特別注意:提交程式碼後,程式碼行前面的空格在顯示時被清除。但後臺仍然可以看到空格。釋出之前,我們會把程式碼格式化後釋出。如果你想自己提交時就格式化。請根據自己選擇的語言,在程式碼前加上。程式碼結尾加上 pre 的閉合標籤。
1 2 3 4 5 6 7 8 9 10 11 12 |
<pre class="brush: python; gutter: true"> <pre class="brush: c; gutter: true"> <pre class="brush: csharp; gutter: true"> <pre class="brush: cpp; gutter: true"> <pre class="brush: java; gutter: true"> <pre class="brush: ruby; gutter: true"> <pre class="brush: scala; gutter: true"> <pre class="brush: php; gutter: true"> <pre class="brush: perl; gutter: true"> 如果你不是採用上面那些程式語言,可直接用純文字: <pre class="brush: text; gutter: true"> |
描述
來電轉駁服務是一個把呼叫號碼A轉移到號碼B的服務。舉個例子:當你正在度假時,這樣的系統非常有幫助。A君度假去了,那麼,A君的工作電話可以通過來電轉駁至B君。更進一步講,當B君也正好在度假,還可以繼續通過來電轉駁到C君,依次類推。也就是說,當一個客戶打電話到A君,通過來電轉駁系統,最後轉接到了C君。
本期的程式設計挑戰是要實現一個和來電轉駁系統相關的邏輯。根據個人的度假時間安排和來電轉駁設定,返回來電轉駁的個數和“深度”。
輸入
第一行給出一個整數N,代表從第二行開始有多少個度假安排。
每個度假安排為單獨一行,其中包括4個數字:第一個數字是被叫人的4位數電話號碼,第二個數字是來電轉駁至的4位數電話號碼, 第三個數字是起始時間 ( 用天數計算),最後一個數字是度假時間的有效期(用天數計算)。
最後一行是開始日期。
請注意:
1) 這裡的時間日期是基於天數順序。1代表第一天,2代表第二天,依次類推。這裡沒有月份和年這樣的時間單位,統一用天數來作為度假的日期安排。(天數最高是32位無符號整數的最大值)
2) 輸入的來電轉駁不會出現環路。如描述中所舉例, A君轉到B君,B君再轉到C君。但C君不會轉到A君。對於有環路的輸入,檢測並提示輸入環路錯誤,這點不作要求。當然,如果你的程式可以檢測這種環路,並提示錯誤, 當然更好。
3)不能同時從一個號碼轉移到多個號碼。如描述中所舉例, A君轉到B君,A君不能同時又轉移到C君。
輸出
基於開始度假的日期 (輸入資料的最後一行), 你的程式必須列印輸出2行資訊。
1)當天設定了多少個來電轉駁
2)當天最長的來電轉駁是多長次 ( A君轉到B君,B君再轉到C君。這個是2次來電轉駁)
示例
(請注意:這個僅僅是示例資料,它們是為了方便大家理解題目而新增的,你的程式碼不能僅解析這5行示例資料)
1. 輸入示例
1 2 3 4 5 |
3 0000 0001 1 3 0001 4964 2 1 4964 0005 2 3 2 |
2. 輸出示例
1 2 |
第 2 天共有 3 個來電轉駁設定 第 2 天最長的來電轉駁是 3 次 |
//第 2 天為什麼有 3 個來電轉駁?如果你沒有看懂,這裡解釋一下: “ 0000 0001 1 3 ” 這個是3天有效,所以,第二天這個來電轉駁還有效。“0001 4964 2 1” 和 “4964 0005 2 3“ 都是第二天設定的,有效期分別是1和3天。所以,第 2 天共有 3 個來電轉駁設定。