AtCoder Beginner Contest 189振り返り
ABC189に参加しました。
時間内にABC3問をACできました。
復習します。
A - Slot
◆問題文
あなたはスロットマシーンで遊んでいます。スロットを回した結果は3文字の英大文字C1,C2,C3で表され、これらが全て同じ文字であるとき当たりです。当たりかどうか判定してください。
◆制約
Ciは英大文字
https://atcoder.jp/contests/abc189/tasks/abc189_a
using System; using System.Collections.Generic; using System.Linq; class Hello { static void Main(string[] args) { //Cの値を保持する //var X_Y = Console.ReadLine().Split().Select(x => int.Parse(x)).ToArray(); var C = Console.ReadLine(); //回答用変数 var ans = "Lost"; //Cの3文字判定 if (C[0] == C[1] && C[1] == C[2] && C[2] == C[0]) { ans = "Won"; } Console.WriteLine(ans); } }
B - Alcoholic
◆問題文
高橋君はお酒をN杯飲みました。i番目に飲んだお酒は、量がVi ml、アルコール度数がPi %です。
高橋君はアルコールの摂取量がX mlを超えると酔っ払います。
高橋君が酔っ払ったのは何杯目のお酒を飲んでいるときですか。
ただし、N杯全てのお酒を飲んだあとでも酔っ払っていない場合は、かわりに-1を出力してください。
◆制約
入力は全て整数
1≤N≤10^3
0≤X≤10^6
1≤Vi≤10^3
0≤Pi≤100
https://atcoder.jp/contests/abc189/tasks/abc189_b
using System; using System.Collections.Generic; using System.Linq; class Hello { static void Main(string[] args) { //N,Xの値を保持する var N_X = Console.ReadLine().Split().Select(x => int.Parse(x)).ToArray(); var N = N_X[0]; var X = N_X[1]; //アルコール許容度 var ans = 0M; //N回分ループしアルコールの許容度を超えているかチェックする for (var n = 0; n < N; n++) { var alco = Console.ReadLine().Split().Select(x => Decimal.Parse(x)).ToArray(); ans += alco[0] * (alco[1] / 100); if (X < ans) { Console.WriteLine(n + 1); return; } } Console.WriteLine("-1"); } }
C - Mandarin Orange
◆問題文
高橋君の前にN枚の皿が一列に並べられており、左からi番目の皿にはAi個のみかんが置かれています。
高橋君は次の3つの条件を全て満たすような整数の組(l,r,x)を1つ選びます。
1≤l≤r≤N
1≤x
l以上r以下の全ての整数iについて、x≤Ai
その後、高橋君はl番目からr番目まで(両端を含む)の全ての皿からみかんをx個ずつ取って食べます。
整数の組(l,r,x)を適切に選んだとき、高橋君は最大で何個のみかんを食べることができますか。
◆制約
入力は全て整数
1≤N≤10^4
1≤Ai≤10^5
https://atcoder.jp/contests/abc189/tasks/abc189_c
using System; using System.Collections.Generic; using System.Linq; class Hello { static void Main(string[] args) { //Nの値を保持する var N = int.Parse(Console.ReadLine()); //A1...An var As = Console.ReadLine().Split().Select(x => int.Parse(x)).ToArray(); //As配列の重複を削除し、昇順に並び替える var orderAsc = As.Distinct().OrderBy(x => x).ToArray(); var tmpMax = 0; //As配列内の値をorderAscの小さい順にチェックしていく for (var n = 0; n < orderAsc.Count(); n++) { var tmp = 0; foreach (var i in As) { //もしorderAscの値よりAiが小さければそこまでのMax値を一時的に保持する if (orderAsc[n] <= i) { tmp += orderAsc[n]; } else { if (tmpMax < tmp) { tmpMax = tmp; } tmp = 0; } } //最大値を更新していればMaxを入れ替え if (tmpMax < tmp) { tmpMax = tmp; } } Console.WriteLine(tmpMax); } }