ccf-明ちゃん放課後

2192 ワード

テーマの背景
漢東省政法大学付属中学校のある光明区では最近、「知恵の光明」という知恵都市プロジェクトが実施された.具体的には、交通分野では、「知恵の光明」端末を通じて、光明区のすべての信号がこの時の状態を見ることができる.明ちゃんの学校にも「知恵の光明」端末が設置されており、明ちゃんはこの端末から与えられた情報を利用して、学校が終わって家に帰る時間を試算したいと思っています.
問題の説明
ある放課後、明ちゃんは自分の家に帰るルートを計画し、各区間を通る時間を予測することができます.また、明ちゃんは学校に設置された「知恵の光」端末を通じて、出発時刻に道を通るすべての信号の指示状態を見た.明ちゃんが今度家に帰るのに必要な時間を計算してください.
入力フォーマット
                   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秒残っています.明ちゃんが交差点に着いたとき、この信号はもう青になったので、直接通過するのを待つ必要はありません.次に2段目の道を通って、11秒かかります.2番目の信号は黄色で、あと2秒です.明ちゃんが交差点に着いたとき、この信号はもう赤信号になって、まだ11秒残っています.次に3、4段目の道を通って、9秒かかります.3番目の信号は出発時に信号で、まだ10秒残っています.明ちゃんが交差点に着いたとき、この信号はもう赤信号になって、あと2秒残っています.次は最後の道を通って、3秒かかります.合計10+11+11+9+2+3=46秒.評価例の規模と所定のいくつかの試験点は特殊な性質を有している:*最初の2つの試験点には信号ランプが存在しない.試験点の入力データ規模:*上位6試験点保証n≦103.*すべての試験点はn≦105を保証する.
#include
using namespace std;
int main() {
	int r,y,g,n;
	long long sum=0;//    ,        ,      10^5x10^6=10^11>2^32,    int   
	cin>>r>>y>>g;
	cin>>n;
	while(n--) {
		int k,t;
		cin>>k>>t;
		if(k==0) {
			sum += t;
		}
		if(k==1) {
			int flag = sum % (r+y+g);//r g  y
			if(t-flag>0) {//r
				sum += t-flag;
			}
			if(flag-t-g-y>0) {//r
				sum += r-(flag-t-g-y);
			}
			if(flag-t-g>0&&flag-t-g-y<0) {//y
				sum += y-(flag-t-g)+r;
			}
		}
		if(k==2) {
			int flag = sum % (r+y+g);
			if(t-flag>0) {//   
				sum += t-flag+r;
			}
			if(flag-t-g-r>0) {//   
				sum += y-(flag-t-g-r)+r;
			}
			if(flag-t>0&&flag-t-r<0) {//   
				sum += r-(flag-t);
			}
		}
		if(k==3) {
			int flag = sum % (r+g+y);
			if(flag-t>0&&flag-t-y<0) {//    
				sum += y-(flag-t)+r; 
			}
			if(flag-t-y>0&&flag-t-y-r<0) {//    
				sum += r - (flag-t-y);
			}
		}
	}
	cout<