提出 #5063713


ソースコード 拡げる

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
using static System.Math;

namespace atcoder
{
    class Program
    {
        static void Main(string[] args)
        {
            do
            {
                new Program().Solve(new ConsoleInput(In));
            } while (args.Length > 0 && args[0] == "Debug");
        }

        public void Solve(ConsoleInput input)
        {
            var n = input.ReadInt;
            var s = input.Read;

            var c = n;
            var bl = new int[n];
            var wh = new int[n];
            if (s[0] == '#') bl[0] = 1;
            else wh[0] = 1;
            for(var i = 1; i < n; i++)
            {
                bl[i] = bl[i - 1];
                wh[i] = wh[i - 1];
                if (s[i] == '#') bl[i]++;
                else wh[i]++;
            }
            for (var i = 0; i < n; i++)
            {
                c = (c > bl[i] + (wh[n - 1] - wh[i])) ? bl[i] + (wh[n - 1] - wh[i]) : c;
            }

            WriteLine($"{c}");
        }
    }
}

class Math
{
    public static int Min(params int[] a)
    {
        if (a.Length == 0) return 0;

        var min = a[0];
        for (var i = 1; i < a.Length; i++)
        {
            if (min > a[i]) min = a[i];
        }
        return min;
    }
    public static long Min(params long[] a)
    {
        if (a.Length == 0) return 0;

        var min = a[0];
        for (var i = 1; i < a.Length; i++)
        {
            if (min > a[i]) min = a[i];
        }
        return min;
    }

    public static int Max(params int[] a)
    {
        if (a.Length == 0) return 0;

        var max = a[0];
        for (var i = 1; i < a.Length; i++)
        {
            if (max < a[i]) max = a[i];
        }
        return max;
    }
    public static long Max(params long[] a)
    {
        if (a.Length == 0) return 0;

        var max = a[0];
        for (var i = 1; i < a.Length; i++)
        {
            if (max < a[i]) max = a[i];
        }
        return max;
    }

    public static int Lcm(int a, int b)
    {
        return a * b / Gcd(a, b);
    }

    public static int Gcd(int a, int b)
    {
        if (a < b)
            return Gcd(b, a);
        while (b != 0)
        {
            var remainder = a % b;
            a = b;
            b = remainder;
        }
        return a;
    }
}

class UnionFind
{
    private int[] parent;
    private int[] rank;
    private long[] size;

    public UnionFind(int count)
    {
        parent = new int[count];
        rank = new int[count];
        size = new long[count];
        for (var i = 0; i < count; i++)
        {
            parent[i] = i;
            rank[i] = 0;
            size[i] = 1;
        }
    }

    public int Root(int x)
    {
        if (parent[x] != x)
        {
            parent[x] = Root(parent[x]);
        }
        return parent[x];
    }

    public void Unite(int a, int b)
    {
        var ra = Root(a);
        var rb = Root(b);

        if (Size(ra) < Size(rb))
        {
            parent[ra] = rb;
            size[rb] += size[ra];
        }
        else
        {
            parent[rb] = ra;
            size[ra] += size[rb];
        }
        if (rank[ra] == rank[rb]) rank[ra]++;
    }

    public bool Same(int a, int b)
    {
        return Root(a) == Root(b);
    }

    public long Size(int x)
    {
        return size[Root(x)];
    }
}

class ConsoleInput
{
    private readonly System.IO.TextReader _stream;
    private readonly char _separator;
    private Queue<string> inputStream;
    public ConsoleInput(System.IO.TextReader stream, char separator = ' ')
    {
        _separator = separator;
        _stream = stream;
        inputStream = new Queue<string>();
    }
    public string Read
    {
        get
        {
            if (inputStream.Count != 0) return inputStream.Dequeue();
            string[] tmp = _stream.ReadLine().Split(_separator);
            for (int i = 0; i < tmp.Length; ++i)
                inputStream.Enqueue(tmp[i]);
            return inputStream.Dequeue();
        }
    }
    public string ReadLine { get { return _stream.ReadLine(); } }
    public int ReadInt { get { return int.Parse(Read); } }
    public long ReadLong { get { return long.Parse(Read); } }
    public double ReadDouble { get { return double.Parse(Read); } }
    public string[] ReadStrArray(long N) { var ret = new string[N]; for (long i = 0; i < N; ++i) ret[i] = Read; return ret; }
    public int[] ReadIntArray(long N) { var ret = new int[N]; for (long i = 0; i < N; ++i) ret[i] = ReadInt; return ret; }
    public long[] ReadLongArray(long N) { var ret = new long[N]; for (long i = 0; i < N; ++i) ret[i] = ReadLong; return ret; }
}

提出情報

提出日時
問題 C - Stones
ユーザ norezark
言語 C# (Mono 4.6.2.0)
得点 0
コード長 5011 Byte
結果 WA
実行時間 28 ms
メモリ 16224 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 300
結果
AC × 3
AC × 21
WA × 4
セット名 テストケース
Sample s1.txt, s2.txt, s3.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, s1.txt, s2.txt, s3.txt
ケース名 結果 実行時間 メモリ
01.txt AC 28 ms 12128 KiB
02.txt AC 28 ms 14176 KiB
03.txt AC 28 ms 16224 KiB
04.txt AC 27 ms 12128 KiB
05.txt AC 28 ms 16224 KiB
06.txt AC 28 ms 14176 KiB
07.txt AC 27 ms 12128 KiB
08.txt AC 27 ms 12128 KiB
09.txt WA 27 ms 14176 KiB
10.txt WA 26 ms 14176 KiB
11.txt AC 27 ms 14176 KiB
12.txt AC 27 ms 12128 KiB
13.txt WA 27 ms 14176 KiB
14.txt AC 27 ms 16224 KiB
15.txt AC 27 ms 16224 KiB
16.txt AC 27 ms 14176 KiB
17.txt AC 26 ms 12128 KiB
18.txt AC 27 ms 14176 KiB
19.txt AC 23 ms 11220 KiB
20.txt WA 22 ms 9172 KiB
21.txt AC 23 ms 11220 KiB
22.txt AC 23 ms 13268 KiB
s1.txt AC 23 ms 11220 KiB
s2.txt AC 23 ms 11220 KiB
s3.txt AC 22 ms 9172 KiB