0
0

AtCoderをC#で始めてみたよ -AtCoder Beginner Contest 360-

Posted at

ABC360に参加したぞーー
前回のはこちら

結果

また,3完,4014位...今回はDまで解ける兆しがあったがTLEになってだめだった

A - A Healthy Breakfast

image.png

コメント

たかだか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

image.png

コメント

なんか文字列系のすごい苦手なんだよな.全部数字で頼む

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

image.png

コメント

これは割とすんなりできた.ダブってる箱から最大値を除いた部分を運ぶ.逆に全部の合計から各箱の最大値を引いていけばいいんじゃないかと気づき,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

image.png

コメント

右向きの蟻と左向きの蟻でリストを作ってソートする.そのあと右向きの蟻一つ一つに対して,①右向きの蟻より左向きの蟻の方が大きい,②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までいけたなーーーー悔しい

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0