日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

201812CCF-CCSP竞赛:第1题-小明上学

發布時間:2023/12/14 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 201812CCF-CCSP竞赛:第1题-小明上学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目背景
  小明是漢東省政法大學附屬中學的一名學生,他每天都要騎自行車往返于家和學校。為了能盡可能充足地睡眠,他希望能夠預計自己上學所需要的時間。他上學需要經過數段道路,相鄰兩段道路之間設有至多一盞紅綠燈。
  京州市的紅綠燈是這樣工作的:每盞紅綠燈有紅、黃、綠三盞燈和一個能夠顯示倒計時的顯示牌。假設紅綠燈被設定為紅燈 r 秒,黃燈 y 秒,綠燈 g 秒,那么從 0 時刻起,[0,r) 秒內亮紅燈,車輛不許通過;[r, r+g) 秒內亮綠燈,車輛允許通過;[r+g, r+g+y) 秒內亮黃燈,車輛不許通過,然后依次循環。倒計時的顯示牌上顯示的數字 l(l > 0)是指距離下一次信號燈變化的秒數。
問題描述
  一次上學的路上,小明記錄下了經過每段路的時間,和各個紅綠燈在小明到達路口時的顏色和倒計時秒數。希望你幫忙計算此次小明上學所用的時間。
輸入格式
  輸入的第一行包含空格分隔的三個正整數 r、y、g,表示紅綠燈的設置。這三個數均不超過 106。
  輸入的第二行包含一個正整數 n(n ≤ 100),表示小明總共經過的道路段數和看到的紅綠燈數目。
  接下來的 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
樣例輸出
70
樣例說明
  小明先經過第一段道路,用時 10 秒,然后等待 5 秒的紅燈,再經過第二段道路,用時 11 秒,然后等待 2 秒的黃燈和 30 秒的紅燈,再經過第三段、第四段道路,分別用時6、3秒,然后通過綠燈,再經過最后一段道路,用時 3 秒。共計 10 + 5 + 11 + 2 + 30 + 6 + 3 + 3=70 秒。
評測用例規模與約定
  測試點 1, 2 中不存在任何信號燈。
  測試點 3, 4 中所有的信號燈在被觀察時均為綠燈。
  測試點 5, 6 中所有的信號燈在被觀察時均為紅燈。
  測試點 7, 8 中所有的信號燈在被觀察時均為黃燈。
  測試點 9, 10 中將出現各種可能的情況。
 
我滴代碼:

import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class Main{public static void main(String[] args) {//讀取數據Scanner scan = new Scanner(System.in);int[] lamp = new int[4];lamp[1]=scan.nextInt();//rlamp[2]=scan.nextInt();//ylamp[3]=scan.nextInt();//gint n = scan.nextInt();//經過路口數List<Crossing> list = new ArrayList<Crossing>();for (int i = 0; i < n; i++) {list.add(new Crossing(scan.nextInt(), scan.nextInt()));}//計算時間int total=0;for (Crossing cro : list) {switch(cro.lamp) {case 0 : total+=cro.time; break;case 1 : total+=cro.time;break;case 2 : total+=cro.time+lamp[1];break;case 3 : break;default: ;}}System.out.println(total);} } //經過路口時的t lamp與k time class Crossing {int lamp;int time;public Crossing() {}public Crossing(int lamp, int time) {super();this.lamp = lamp;this.time = time;} }

我滴心得
題目一看文字特別長,第一眼過去感覺模模糊糊,第二遍又讀了個大概,始終沒能抓住題目的核心,當把題目仔細過幾遍就可以提煉出題目中的核心:

分析

用先輸入三個數子分別表示紅、黃、綠三盞燈,(紅路燈還有個倒計時的顯示牌),
然后第二行輸入的是經過道路段數和看到的紅綠燈數目,
此處可結合生活理解為,兩端道路之間沒有紅路燈,在道路匯交口才有紅路燈,
因此后面輸入的為當
為0時,在路段內,沒有紅路燈,計算時間,只加加經過時間,
為1時,在路口處,為紅燈,此時應該等待,紅燈變為綠燈才能通信,因此加等待時間(紅燈的倒計時)
為2時,在路口處,為黃燈,此時應該等黃燈變為紅燈,在到綠燈時方可通過,所以此處等待時間為黃燈倒計時時間、紅燈時間
為3時,在路口,為綠燈,此時可以直接通信,不需要等待。

所以此題可以很容易實現,代碼思路這里就不詳述了,此處又加了一個類,代碼顯得過多了,不足之處,歡迎指正,一起學習,共同進步。

總結

以上是生活随笔為你收集整理的201812CCF-CCSP竞赛:第1题-小明上学的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。