CCF CSP暁明の学校C ++のjavaのpython csp201812_2 100分
トピック背景
最近導入された「スマート光」スマートシティ・プロジェクトと呼ばれる地域に政治のHandong大学とライト地区高等学校附属。運輸部門に固有のは、ターミナル「スマート光」を通じて、あなたはすべてのトラフィックは、この時点で状態の明るい領域を点灯見ることができます。暁明の学校も設置「スマート光」は、端末、暁明は学校から自分の家のこのターミナル、推定時間に与えられた情報を利用したいと思います。
問題の説明
放課後一度は、暁明は、自分の家のルートを計画されている、と時間の様々なセクションを予測することができます。一方、「知恵明るい」端子から暁明は、すべてのトラフィックライトは出発時刻の後に道路の状況を示す見て、学校内に設置しました。暁明が家に必要な時間を計算する助けてください。
入力フォーマット
3つの第1の入力ラインのは、正の整数rをスペースで区切られた、Y、G、交通信号のセットを表しを含みます。3数10以下の6。
第二行は、正の整数n、道路セグメントの数とボブの合計を通る光の数が含ま入力。
次のn行、各ラインは、二つのスペース区切りの整数K、Tを含有します。= 0 kが、道路の後期間を示すtが10以下でない場合は、T秒かかります6。 ;場合K =それぞれ1,2,3、出発時刻、交通信号灯が赤である状態、イエロー、緑色光、カウントダウン表示がカードTにデジタル表示され、ここでtはもはや、R、Y、Gよりもありません。
出力フォーマット
出力ボブがして、学校から帰ってきた時間を表す数値。
サンプル入力
30 30 3
。8
0 10
。1 5
0 11
2 2
0 6
3 0
3 10
0.3
サンプル出力
46
例の説明
第一のセグメントを介して暁第一通路、10秒。最初のトラフィックライトを開始する5秒が左、赤色光であり、ボブが交差点に到達したとき、トラフィックライトが緑に変わった、直接待つことはありません。次に、時間11秒で第二のセクション通過後。第二トラフィック光は黄色光で開始して、2秒左、交差点に到達したとき暁、交通信号が赤に変化した、11秒放置しました。続いて第三、第四のセグメント道路、9秒スルー。第三のトラフィック光を開始する10秒放置し、緑の光であり、ボブが接合部に到達したとき、交通信号が赤に変わった2秒を残しました。次に、3秒の時間と道路の最後のセクションの後。合計10 + 11 + 11 + 9 + 2 + 3 = 46秒。
評価スケールのユースケースは、とすることに合意した
特殊な性質を持っているいくつかのテスト・ポイントその:
*最初の2つのテスト・ポイントにはライトがありません。
入力データポイントのスケール試験:
*第6のテストポイント10≤N-を確保3。
*すべてのテストポイント10≤N-ていることを確認してください。5。
分析
この質問といくつかの困難と比較して、最初の質問の、タイトルが各交差点の交通信号灯の出発時間の残り時間に与えられているので、それがある場合に交差点をボブ、交差点では、あなたが直接計算する必要がない場合プラスすることができます、そうでない場合は交差点が、交通信号、あなたは時間の交差によって待機時間を計算する。・その後、異なる状況下で、この状態では、現在のトラフィックライトを計算する必要があります。ここで、交通信号灯のルールは、緑、黄色を交互に赤で。
データのより大きなサイズのため、この問題は、** int型がオーバーフローするので、結果は多くの人がで出ていない理由であるストレージ用のロングタイプを使用します。**しかし、この問題を考慮していない、その後のpythonを使用している場合。
次のようにC ++コードがあります
#include<cstdio>
typedef long long ll;
int main(){
int r,y,g;
scanf("%d%d%d",&r,&y,&g);
int count;
scanf("%d",&count);
int index,time;
ll result = 0;
ll total = r + y + g;
for(int i = 0;i < count;i++){
scanf("%d%d",&index,&time);
if(index == 0){
result += time;
}
else if(index == 1){
ll temp = result % total;
if(temp < time){
result += (time - temp);
}
else {
if(temp > time + g){
if(temp < time + g + y){
ll tt = temp - time - g;
result += (r + y - tt);
}
else{
ll tt = temp - time - g - y;
result += (r - tt);
}
}
}
}
else if(index == 2){
ll temp = result % total;
if(temp < time){
result += (time - temp + r);
}
else{
if(temp < time + r){
ll tt = temp - time;
result += (r - tt);
}
else if(temp > time + r + g){
ll tt = temp - time - r - g;
result += (y - tt + r);
}
}
}
else{
ll temp = result % total;
if(temp > time){
if(temp < time + y){
ll tt = temp - time;
result += (y - tt + r);
}
else{
if(temp < time + y + r){
ll tt = temp - time - y;
result += (r - tt);
}
}
}
}
}
printf("%lld\n",result);
return 0;
}
次のようにJavaコード
import java.util.Scanner;
public class csp201812_2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int r = input.nextInt();
int y = input.nextInt();
int g = input.nextInt();
int count = input.nextInt();
long total = r + y + g;
long result = 0;
int index;
int time;
for(int i = 0;i < count;i++){
index = input.nextInt();
time = input.nextInt();
if(index == 0){
result += time;
}
else if(index == 1){
long temp = result % total;
if(temp < time){
result += (time - temp);
}
else {
if(temp > time + g){
if(temp < time + g + y){
long tt = temp - time - g;
result += (r + y - tt);
}
else{
long tt = temp - time - g - y;
result += (r - tt);
}
}
}
}
else if(index == 2){
long temp = result % total;
if(temp < time){
result += (time - temp + r);
}
else{
if(temp < time + r){
long tt = temp - time;
result += (r - tt);
}
else if(temp > time + r + g){
long tt = temp - time - r - g;
result += (y - tt + r);
}
}
}
else{
long temp = result % total;
if(temp > time){
if(temp < time + y){
long tt = temp - time;
result += (y - tt + r);
}
else{
if(temp < time + y + r){
long tt = temp - time - y;
result += (r - tt);
}
}
}
}
}
System.out.println(result);
input.close();
}
}
次のようにのpython3コードがあります
ryg = input().split(" ")
r = (int)(ryg[0])
y = (int)(ryg[1])
g = (int)(ryg[2])
count = (int)(input())
total = r + y + g
result = 0
for i in range(count):
te = input().split()
index = (int)(te[0])
time = (int)(te[1])
if index == 0:
result += time
elif index == 1:
temp = result % total
if temp < time:
result += (time - temp)
else:
if temp > time + g:
if temp < time + g + y:
tt = temp - time - g
result += (r + y - tt)
else:
tt = temp - time - g - y
result += (r - tt)
elif index == 2:
temp = result % total
if temp < time:
result += (time - temp + r)
else :
if temp < time + r:
tt = temp - time
result += (r - tt)
elif temp > time + r + g:
tt = temp - time - r - g
result += (y - tt + r)
else :
temp = result % total
if temp > time:
if temp < time + y:
tt = temp - time
result += (y - tt + r)
else:
if temp < time + y + r:
tt = temp - time - y
result += (r - tt)
print(result)
OK!」あなたがより良い方法を持っている場合、コメント領域にああ通信することができ、行って再。