Submission #1677914


Source Code Expand

using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Text.RegularExpressions;
using System.Linq;
using System.IO;
using System.Diagnostics;



class Magatro
{
    private readonly int N = 50;
    private char[] S;
    private bool[] P;
    private Random R;
    private Stopwatch Time;

    private void Init()
    {
        Time = new Stopwatch();
        Time.Start();
        R = new Random();
        P = new bool[N * N];
    }

    private long GetTime()
    {
        Time.Stop();
        var ret = Time.ElapsedMilliseconds;
        Time.Start();
        return ret;
    }

    private void RandomSet()
    {
        for (int i = 0; i < N * N; i++)
        {
            var r = R.Next(20);
            if (r == 0)
            {
                P[i] = !P[i];
            }
        }
    }

    private int GetPoint(int i, int j)
    {
        if (i < 0 || j < 0 || i >= N || j >= N)
        {
            throw new IndexOutOfRangeException();
        }
        return i * N + j;
    }

    private void Scan()
    {
        S = new char[N * N];
        for (int i = 0; i < N; i++)
        {
            var l = Console.ReadLine();
            for (int j = 0; j < N; j++)
            {
                S[GetPoint(i, j)] = l[j];
            }
        }
    }

    private void Write(bool[] ans)
    {
        var sb = new StringBuilder();
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < N; j++)
            {
                var p = GetPoint(i, j);
                if (S[p] != '.')
                {
                    sb.Append(S[p]);
                }
                else if (ans[p])
                {
                    sb.Append('+');
                }
                else
                {
                    sb.Append('.');
                }
            }
            sb.Append('\n');
        }
        Console.Write(sb.ToString());
    }

    private char[] Fall(bool[] b)
    {
        var f = new char[N * N];
        for (int j = 0; j < N; j++)
        {
            int h = N - 1;
            for (int i = N - 1; i >= 0; i--)
            {
                var p = GetPoint(i, j);
                if (S[p] != '.' || b[p])
                {
                    f[GetPoint(h, j)] = S[p];
                    h--;
                }
            }
        }
        return f;
    }

    private int Score(char[] c)
    {
        var check = new bool[N * N];
        int maru = 0;
        int batsu = 0;
        for (int j = 0; j < N; j++)
        {
            for (int i = N - 1; i >= 0; i--)
            {
                var gp = GetPoint(i, j);
                var p = c[gp];
                if (p != 'o' && p != 'x')
                {
                    if (p == '\0')
                    {
                        break;
                    }
                    continue;
                }
                if (check[gp])
                {
                    continue;
                }
                var q = new Queue<int>();
                q.Enqueue(gp);
                int ss = 0;
                while (q.Count > 0)
                {
                    var pp = q.Dequeue();
                    ss++;
                    check[pp] = true;
                    int ii = pp / N;
                    int jj = pp % N;
                    if (ii > 0)
                    {
                        var np = GetPoint(ii - 1, jj);
                        if (!check[np] && c[np] == p)
                        {
                            q.Enqueue(np);
                        }
                    }
                    if (ii < N - 1)
                    {
                        var np = GetPoint(ii + 1, jj);
                        if (!check[np] && c[np] == p)
                        {
                            q.Enqueue(np);
                        }
                    }
                    if (jj > 0)
                    {
                        var np = GetPoint(ii, jj - 1);
                        if (!check[np] && c[np] == p)
                        {
                            q.Enqueue(np);
                        }
                    }
                    if (jj < N - 1)
                    {
                        var np = GetPoint(ii, jj + 1);
                        if (!check[np] && c[np] == p)
                        {
                            q.Enqueue(np);
                        }
                    }
                }
                switch (p)
                {
                    case 'o':
                        maru = Math.Max(maru, ss);
                        break;
                    case 'x':
                        batsu = Math.Max(batsu, ss);
                        break;
                }
            }
        }

        return maru + batsu;
    }

    private int GetScore(bool[] b)
    {
        var f = Fall(b);
        return Score(f);
    }

    private void DebugWrite(char[] c)
    {
        var sb = new StringBuilder();
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < N; j++)
            {
                sb.Append(c[GetPoint(i, j)]);
            }
            sb.Append('\n');
        }
        Console.Write(sb.ToString());
    }



    public void Solve()
    {
        Scan();
        Init();

        RandomSet();
        Write(P);
        //Console.WriteLine(GetTime());
        //Console.WriteLine(GetScore(P));
        //DebugWrite(Fall(P));
    }

    static public void Main()
    {
        new Magatro().Solve();

    }
}

Submission Info

Submission Time
Task A - ○×ブロック
User mban
Language C# (Mono 4.6.2.0)
Score 1594
Code Size 5821 Byte
Status AC
Exec Time 23 ms
Memory 13264 KB

Judge Result

Set Name test_01 test_02 test_03 test_04 test_05 test_06 test_07 test_08 test_09 test_10
Score / Max Score 130 / 2500 170 / 2500 162 / 2500 187 / 2500 198 / 2500 94 / 2500 153 / 2500 142 / 2500 171 / 2500 187 / 2500
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
Set Name Test Cases
test_01 subtask_01_01.txt
test_02 subtask_01_02.txt
test_03 subtask_01_03.txt
test_04 subtask_01_04.txt
test_05 subtask_01_05.txt
test_06 subtask_01_06.txt
test_07 subtask_01_07.txt
test_08 subtask_01_08.txt
test_09 subtask_01_09.txt
test_10 subtask_01_10.txt
Case Name Status Exec Time Memory
subtask_01_01.txt AC 23 ms 11216 KB
subtask_01_02.txt AC 23 ms 11216 KB
subtask_01_03.txt AC 23 ms 13264 KB
subtask_01_04.txt AC 22 ms 9168 KB
subtask_01_05.txt AC 22 ms 11216 KB
subtask_01_06.txt AC 22 ms 9168 KB
subtask_01_07.txt AC 23 ms 13264 KB
subtask_01_08.txt AC 22 ms 11216 KB
subtask_01_09.txt AC 23 ms 11216 KB
subtask_01_10.txt AC 23 ms 11216 KB