Submission #4543737


Source Code Expand

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            Solve();
        }
        private const int MOD = 1000000007;
        private const int INF = 100000000;
        private struct Square
        {
            public long y;
            public long x;
            public Square(long x, long y)
            {
                this.x = x;
                this.y = y;
            }
        }
        static void Solve()
        {
            var o = ReadAndParseLongArr();
            var h = o[0];
            var w = o[1];
            var n = o[2];
            var dic = new Dictionary<long, int>();
            for(int i=0;i<n;++i)
            {
                o = ReadAndParseLongArr();
                var a = o[0]-1;
                var b = o[1]-1;
                for(int k=0;k<=2;++k)
                {
                    for(int l=0;l<=2;++l)
                    {
                        var x = b - k;
                        var y = a - l;
                        if(0<=x && x < w-2 && 0<= y && y < h-2)
                        {
                            var key = (x << 32) + y;
                            if( !dic.ContainsKey(key))
                            {
                                dic.Add(key, 0);
                            }
                            dic[key]++;
                        }
                    }
                }
            }

            var ans = new long[10];
            foreach(var kv in dic)
            {
                ans[kv.Value]++;
            }
            long without0 = ans.Sum();
            ans[0] = (h - 2) * (w - 2) - without0;
            foreach(var ans0 in ans)
            {
                Console.WriteLine(ans0);
            }
        }

        #region よく使う便利関数
        private static bool isPrime(long x)
        {
            if (x == 2) { return true; }
            if (x < 2 || x % 2 == 0) { return false; }
            long i = 3;
            while (i * i <= x)
            {
                if (x % i == 0) { return false; }
                i = i + 2;
            }
            return true;
        }
        private static long lcm(long x, long y)
        {
            return x / gcd(x, y) * y;
        }
        private static long gcd(long x, long y)
        {
            return y > 0 ? gcd(y, x % y) : x;
        }
        private static long pow(long x, long n)
        {
            if (n == 0) { return 1; }
            long res = pow(x * x % MOD, n / 2);
            if (n % 2 == 1)
            {
                res = res * x % MOD;
            }
            return res;
        }
        private static int ReadAndParseInt()
        {
            return int.Parse(Console.ReadLine());
        }
        private static int[] ReadAndParseIntArr()
        {
            return Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
        }
        private static long ReadAndParseLong()
        {
            return long.Parse(Console.ReadLine());
        }
        private static long[] ReadAndParseLongArr()
        {
            return Array.ConvertAll(Console.ReadLine().Split(' '), long.Parse);
        }

        private static void Swap<T>(ref T x, ref T y)
        {
            T t = x;
            x = y;
            y = t;
        }

        /// <summary>
        /// 指定した値以上の先頭のインデクスを返す
        /// </summary>
        /// <typeparam name="T">比較する値の型</typeparam>
        /// <param name="arr">対象の配列(※ソート済みであること)</param>
        /// <param name="start">開始インデクス [inclusive]</param>
        /// <param name="end">終了インデクス [exclusive]</param>
        /// <param name="value">検索する値</param>
        /// <param name="comparer">比較関数(インターフェイス)</param>
        /// <returns>指定した値以上の先頭のインデクス</returns>
        public static int LowerBound<T>(IReadOnlyList<T> arr, int start, int end, T value, IComparer<T> comparer)
        {
            int low = start;
            int high = end;
            int mid;
            while (low < high)
            {
                mid = ((high - low) >> 1) + low;
                if (comparer.Compare(arr[mid], value) < 0)
                    low = mid + 1;
                else
                    high = mid;
            }
            return low;
        }

        //引数省略のオーバーロード
        public static int LowerBound<T>(IReadOnlyList<T> arr, T value) where T : IComparable
        {
            return LowerBound(arr, 0, arr.Count, value, Comparer<T>.Default);
        }

        /// <summary>
        /// 指定した値より大きい先頭のインデクスを返す
        /// </summary>
        /// <typeparam name="T">比較する値の型</typeparam>
        /// <param name="arr">対象の配列(※ソート済みであること)</param>
        /// <param name="start">開始インデクス [inclusive]</param>
        /// <param name="end">終了インデクス [exclusive]</param>
        /// <param name="value">検索する値</param>
        /// <param name="comparer">比較関数(インターフェイス)</param>
        /// <returns>指定した値より大きい先頭のインデクス</returns>
        public static int UpperBound<T>(IReadOnlyList<T> arr, int start, int end, T value, IComparer<T> comparer)
        {
            int low = start;
            int high = end;
            int mid;
            while (low < high)
            {
                mid = ((high - low) >> 1) + low;
                if (comparer.Compare(arr[mid], value) <= 0)
                    low = mid + 1;
                else
                    high = mid;
            }
            return low;
        }

        //引数省略のオーバーロード
        public static int UpperBound<T>(IReadOnlyList<T> arr, T value)
        {
            return UpperBound(arr, 0, arr.Count, value, Comparer<T>.Default);
        }
        #endregion
    }

    public class DisjointSet
    {
        private int[] rank;
        private int[] p;
        private int[] size;
        public DisjointSet(int n)
        {
            rank = new int[n];
            p = new int[n];
            size = new int[n];
            for (int i = 0; i < n; ++i)
            {
                MakeSet(i);
            }
        }
        public void MakeSet(int x)
        {
            p[x] = x;
            rank[x] = 0;
            size[x] = 1;
        }
        public bool IsSame(int x, int y)
        {
            return FindSet(x) == FindSet(y);
        }
        public void Unite(int x, int y)
        {
            Link(FindSet(x), FindSet(y));
        }
        public void Link(int x, int y)
        {
            if (rank[x] > rank[y])
            {
                p[y] = x;
                size[x] += size[y];
                size[y] = 0;
            }
            else
            {
                p[x] = y;
                size[y] += size[x];
                size[x] = 0;
                if (rank[x] == rank[y])
                {
                    rank[y]++;
                }
            }
        }
        public int FindSet(int x)
        {
            if (x != p[x])
            {
                p[x] = FindSet(p[x]);
            }
            return p[x];
        }
        public int Size(int x)
        {
            int root = FindSet(x);
            return size[root];
        }
    }
}

Submission Info

Submission Time
Task D - Snuke's Coloring
User masakam1
Language C# (Mono 4.6.2.0)
Score 0
Code Size 7852 Byte
Status TLE
Exec Time 3160 ms
Memory 57528 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 400
Status AC
AC × 17
TLE × 2
Set Name Test Cases
Sample
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, empty.txt, sample_01.txt, sample_02.txt, sample_03.txt
Case Name Status Exec Time Memory
01.txt AC 1213 ms 23620 KiB
02.txt TLE 3160 ms 36340 KiB
03.txt AC 299 ms 18652 KiB
04.txt AC 26 ms 11232 KiB
05.txt AC 178 ms 27856 KiB
06.txt AC 172 ms 29904 KiB
07.txt AC 299 ms 55352 KiB
08.txt AC 304 ms 56884 KiB
09.txt AC 308 ms 56884 KiB
10.txt AC 26 ms 11232 KiB
11.txt AC 2872 ms 35316 KiB
12.txt AC 666 ms 57528 KiB
13.txt AC 28 ms 13280 KiB
14.txt AC 975 ms 57520 KiB
15.txt TLE 3160 ms 37872 KiB
empty.txt AC 25 ms 11232 KiB
sample_01.txt AC 26 ms 11232 KiB
sample_02.txt AC 26 ms 9184 KiB
sample_03.txt AC 24 ms 11232 KiB