1. 程式人生 > >ccf 小明回家

ccf 小明回家

超過 rdquo strong 內存 return pre += 信息 此刻

試題編號: 201812-2
試題名稱: 小明放學
時間限制: 1.0s
內存限制: 512.0MB
問題描述: 題目背景   漢東省政法大學附屬中學所在的光明區最近實施了名為“智慧光明”的智慧城市項目。具體到交通領域,通過“智慧光明”終端,可以看到光明區所有紅綠燈此時此刻的狀態。小明的學校也安裝了“智慧光明”終端,小明想利用這個終端給出的信息,估算自己放學回到家的時間。 問題描述   一次放學的時候,小明已經規劃好了自己回家的路線,並且能夠預測經過各個路段的時間。同時,小明通過學校裏安裝的“智慧光明”終端,看到了出發時刻
路上經過的所有紅綠燈的指示狀態。請幫忙計算小明此次回家所需要的時間。 輸入格式   輸入的第一行包含空格分隔的三個正整數 r、y、g,表示紅綠燈的設置。這三個數均不超過 106
  輸入的第二行包含一個正整數 n,表示小明總共經過的道路段數和路過的紅綠燈數目。
  接下來的 n 行,每行包含空格分隔的兩個整數 k、t。k=0 表示經過了一段道路,將會耗時 t 秒,此處 t 不超過 106;k=1、2、3 時,分別表示出發時刻,此處的紅綠燈狀態是紅燈、黃燈、綠燈,且倒計時顯示牌上顯示的數字是 t,此處 t 分別不會超過 r、y、g。 輸出格式   輸出一個數字,表示此次小明放學回家所用的時間。 樣例輸入 30 3 30
8
0 10
1 5
0 11
2 2
0 6
0 3
3 10
0 3 樣例輸出 46 樣例說明   小明先經過第一段路,用時 10 秒。第一盞紅綠燈出發時是紅燈,還剩 5 秒;小明到達路口時,這個紅綠燈已經變為綠燈,不用等待直接通過。接下來經過第二段路,用時 11 秒。第二盞紅綠燈出發時是黃燈,還剩兩秒;小明到達路口時,這個紅綠燈已經變為紅燈,還剩 11 秒。接下來經過第三、第四段路,用時 9 秒。第三盞紅綠燈出發時是綠燈,還剩 10 秒;小明到達路口時,這個紅綠燈已經變為紅燈,還剩兩秒。接下來經過最後一段路,用時 3 秒。共計 10+11+11+9+2+3 = 46 秒。 評測用例規模與約定   有些測試點具有特殊的性質:
  * 前 2 個測試點中不存在任何信號燈。
  測試點的輸入數據規模:
  * 前 6 個測試點保證 n ≤ 103
  * 所有測試點保證 n ≤ 105

之前得了60分,剛剛還是60,仔細讀了讀題,發現,sum數據範圍開小了,改成long long就100了。

題目不難,是模擬。

思路就是道路直接加入總時間,其余算一下但概念是處於什麽燈,然後決定加多少。

#include<bits/stdc++.h>
using namespace std;
int r,y,g;
int fun(int x,int y){
    int ans = 0;
    if(x == 0 || x == 1){
        ans = y;
    }else if(x == 2){
        ans = y + r;
    }
    return ans;
}
int main(){
    scanf("%d %d %d",&r,&y,&g);
    int n;
    scanf("%d",&n);
    int tx,ty;
    long long sum = 0;
    while(n--){
        scanf("%d %d",&tx,&ty);
        if(tx == 0){
            sum += ty;
        }else{
            int tt;
            if(tx == 1){
                tt = (r - ty + sum) % (r + g + y);
            }else if(tx == 2){
                tt = (r + g + y - ty + sum) % (r + g + y);
            }else{
                tt = (r + g - ty + sum) % (r + g + y);
            }
            //判燈
            if(tt >= r + g){
                sum += (2 * r + g + y - tt);
            }else if(tt >= r){
                sum += 0;
            }else{
                sum += (r - tt);
            }
        }
    }
    printf("%lld\n",sum);
    return 0;
}

ccf 小明回家