題目連接:http://codeforces.com/gym/101775/problem/Cc++
題意:spa
給出 $N$ 個紅綠燈,又給出 $N+1$ 個距離 $S_i = S_0,S_1, \cdots, S_N$,表明從第 $i$ 個路燈到第 $i+1$ 個路燈的距離(第 $0$ 個距離表明從家到第一個紅綠燈的距離,第 $N$ 個距離表明從最後一個紅綠燈到公司的距離)。code
如今每一個紅綠燈有 $A_i$ 秒的綠燈時長,$B_i$ 秒的紅燈時長,全部的紅綠燈的 $A_i + B_i$ 都相等,你能夠經過設置一個 $OFF_i$ 秒的偏移量來使得每一個紅綠的時間週期先後偏移。blog
如今你有可能在任什麼時候刻從家出發,能夠經過設置全部 $OFF_i$ 使得你在最壞狀況下耗時最少,問是這個耗時是多少。ci
題解:get
最壞狀況是全部紅綠燈中,紅燈時間最長的那個紅綠燈的紅燈時間,全被你等了。而後剩下的全部交通燈均可以經過設置偏移量來讓你通過時正好爲綠燈。it
別問我具體怎麼證實,我不會……等有空了而且腦子清醒的時候也許能夠試試?class
AC代碼:di
#include<bits/stdc++.h> using namespace std; const int MAX_N=1e3+5; double S[MAX_N]; double A[MAX_N],B[MAX_N]; int main() { int T; cin>>T; for(int kase=1;kase<=T;kase++) { int N; cin>>N; for(int i=0;i<=N;i++) scanf("%lf", S+i); double _max=-1; for(int i=1;i<=N;i++) { scanf("%lf%lf",A+i,B+i); _max=max(_max,B[i]); } for (int i=0;i<=N;i++) _max+=S[i]; printf("Case #%d: %.6lf\n",kase,_max); } }
(盜用一下隊友的代碼,嘿嘿……)時間