ABC360に参加したぞーー
前回のはこちら
結果
また,3完,4014位...今回はDまで解ける兆しがあったがTLEになってだめだった
A - A Healthy Breakfast
コメント
たかだか6通りしかないので適当
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
string s = Console.ReadLine();
string ans = "No";
if (s[0] == 'R') ans = "Yes";
if (s[1] == 'R') if (s[2] == 'M') ans = "Yes";
Console.WriteLine(ans);
}
}
B - Vertical Reading
コメント
なんか文字列系のすごい苦手なんだよな.全部数字で頼む
using System;
class Program
{
static void Main()
{
string[] input = Console.ReadLine().Split(' ');
string S = input[0];
string T = input[1];
string ans = "No";
for (int w = 1; w < S.Length; w++)
{
for (int c = 1; c <= w; c++)
{
if (IsMatching(S, T, c, w))
{
ans = "Yes";
break;
}
}
}
Console.WriteLine(ans);
}
static bool IsMatching(string S, string T, int c, int w)
{
string concatenated = "";
for (int i = 0; i < S.Length; i += w)
{
if (i + c - 1 < S.Length)
{
concatenated += S[i + c - 1];
}
}
return concatenated.Equals(T);
}
}
C - Move It
コメント
これは割とすんなりできた.ダブってる箱から最大値を除いた部分を運ぶ.逆に全部の合計から各箱の最大値を引いていけばいいんじゃないかと気づき,boxを用意し,各箱に入っている最大値をメモしていき最後に合計から全部引く.
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
int[] a = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
int[] w = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
long sum = 0;
for (int i = 0; i < n; i++) sum += w[i];
int[] box = new int[n];
for (int i = 0; i < n; i++) box[a[i] - 1] = Math.Max(box[a[i] - 1], w[i]);
for (int i = 0; i < n; i++) sum -= box[i];
Console.WriteLine(sum);
}
}
D - Ghost Ants
コメント
右向きの蟻と左向きの蟻でリストを作ってソートする.そのあと右向きの蟻一つ一つに対して,①右向きの蟻より左向きの蟻の方が大きい,②2つの蟻の差が2T以上である,の2条件を満たせばいいじゃんってことには気づいたけどなんかタイムエラーでダメだった...
回答を見るとしゃくとり法を使えば良いと書いてあって「ああああああ」ってなった.
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
string[] input = Console.ReadLine().Split(' ');
int n = int.Parse(input[0]);
int t = int.Parse(input[1]);
string s = Console.ReadLine();
int[] x = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
long count = 0;
List<int> rightArrowAnts = new List<int>();
List<int> leftArrowAnts = new List<int>();
for (int i = 0; i < n; i++)
{
if (s[i] == '1') rightArrowAnts.Add(x[i]);
else leftArrowAnts.Add(x[i]);
}
rightArrowAnts.Sort();
leftArrowAnts.Sort();
t *= 2;
int a = 0;
int b = 0;
for (int i = 0; i < rightArrowAnts.Count; i++)
{
while (a < leftArrowAnts.Count && leftArrowAnts[a] < rightArrowAnts[i]) a++;
while (b < leftArrowAnts.Count && (long)leftArrowAnts[b] - (long)t <= (long)rightArrowAnts[i]) b++;
count += b - a;
}
Console.WriteLine(count);
}
}
今回は絶対Dまでいけたなーーーー悔しい