結果

問題 No.401 数字の渦巻き
ユーザー りあん
提出日時 2016-07-22 22:30:13
言語 C#
(csc 3.100.19.26603)
結果
AC  
実行時間 33 ms
コード長 5,773 Byte
コンパイル時間 1,059 ms
使用メモリ 18,568 KB
最終ジャッジ日時 2019-11-26 09:48:58

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
01.txt AC 30 ms
14,448 KB
02.txt AC 31 ms
14,484 KB
03.txt AC 33 ms
18,568 KB
04.txt AC 31 ms
16,520 KB
05.txt AC 31 ms
16,516 KB
06.txt AC 30 ms
14,488 KB
07.txt AC 30 ms
16,524 KB
08.txt AC 32 ms
16,508 KB
09.txt AC 30 ms
16,520 KB
10.txt AC 30 ms
14,484 KB
11.txt AC 30 ms
14,480 KB
12.txt AC 31 ms
16,520 KB
13.txt AC 30 ms
12,444 KB
14.txt AC 31 ms
16,524 KB
15.txt AC 31 ms
16,520 KB
16.txt AC 31 ms
16,516 KB
17.txt AC 31 ms
16,536 KB
18.txt AC 31 ms
16,528 KB
19.txt AC 31 ms
14,496 KB
20.txt AC 31 ms
16,528 KB
21.txt AC 30 ms
14,492 KB
22.txt AC 30 ms
14,480 KB
23.txt AC 31 ms
16,532 KB
24.txt AC 32 ms
18,568 KB
25.txt AC 31 ms
18,556 KB
26.txt AC 32 ms
14,488 KB
27.txt AC 31 ms
16,512 KB
28.txt AC 31 ms
18,568 KB
29.txt AC 31 ms
16,516 KB
30.txt AC 30 ms
16,520 KB
テストケース一括ダウンロード
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.3.1-beta4-19462-11 (66a912c9)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;

class Program
{
    const int M = 1000000007;
    const double eps = 1e-9;
    static int[] dd = { 0, 1, 0, -1, 0 };
    static void Main()
    {
        var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
        var sc = new Scan();
        int n = sc.Int;
        var ret = new int[n][];
        for (int i = 0; i < n; i++)
        {
            ret[i] = new int[n];
        }
        int ti = 0, tj = 0, d = 0;
        for (int i = 0; i < n * n; i++)
        {
            ret[ti][tj] = i + 1;
            if (ti + dd[d] < 0 || ti + dd[d] >= n || tj + dd[d + 1] < 0 || tj + dd[d + 1] >= n || ret[ti + dd[d]][tj+ dd[d + 1]] > 0)
            {
                d = (d + 1) % 4;
            }
            ti += dd[d];
            tj += dd[d + 1];
        }
        foreach (var item in ret)
        {
            sw.WriteLine(string.Join(" ", item.Select(x => x.ToString("D3"))));
        }
        sw.Flush();
    }
    static void swap<T>(ref T a, ref T b) { var t = a; a = b; b = t; }

    static T[] copy<T>(T[] a)
    {
        var ret = new T[a.Length];
        for (int i = 0; i < a.Length; i++) ret[i] = a[i];
        return ret;
    }
    static T[][] copy2<T>(T[][] a)
    {
        var ret = new T[a.Length][];
        for (int i = 0; i < a.Length; i++)
        {
            ret[i] = new T[a[0].Length];
            for (int j = 0; j < a[0].Length; j++) ret[i][j] = a[i][j];
        }
        return ret;
    }
}
class Scan
{
    public int Int { get { return int.Parse(Str); } }
    public long Long { get { return long.Parse(Str); } }
    public double Double { get { return double.Parse(Str); } }
    public string Str { get { return Console.ReadLine().Trim(); } }
    public int[] IntArr { get { return StrArr.Select(int.Parse).ToArray(); } }
    public int[] IntArrWithSep(char sep) { return Str.Split(sep).Select(int.Parse).ToArray(); }
    public long[] LongArr { get { return StrArr.Select(long.Parse).ToArray(); } }
    public double[] DoubleArr { get { return StrArr.Select(double.Parse).ToArray(); } }
    public string[] StrArr { get { return Str.Split(); } }
    public void Multi(out int a, out int b) { var arr = IntArr; a = arr[0]; b = arr[1]; }
    public void Multi(out int a, out int b, out int c) { var arr = IntArr; a = arr[0]; b = arr[1]; c = arr[2]; }
    public void Multi(out int a, out string b) { var arr = StrArr; a = int.Parse(arr[0]); b = arr[1]; }
    public void Multi(out string a, out int b) { var arr = StrArr; a = arr[0]; b = int.Parse(arr[1]); }
    public void Multi(out int a, out char b) { var arr = StrArr; a = int.Parse(arr[0]); b = arr[1][0]; }
    public void Multi(out char a, out int b) { var arr = StrArr; a = arr[0][0]; b = int.Parse(arr[1]); }
    public void Multi(out long a, out long b) { var arr = LongArr; a = arr[0]; b = arr[1]; }
    public void Multi(out long a, out int b) { var arr = LongArr; a = arr[0]; b = (int)arr[1]; }
    public void Multi(out int a, out long b) { var arr = LongArr; a = (int)arr[0]; b = arr[1]; }
    public void Multi(out string a, out string b) { var arr = StrArr; a = arr[0]; b = arr[1]; }
}
class mymath
{
    public bool isprime(long a)
    {
        if (a < 2) return false;
        for (long i = 2; i * i <= a; i++) if (a % i == 0) return false;
        return true;
    }
    public long[][] powmat(long[][] A, long n, int M)
    {
        var E = new long[A.Length][];
        for (int i = 0; i < A.Length; i++)
        {
            E[i] = new long[A.Length];
            E[i][i] = 1;
        }
        if (n == 0) return E;
        var t = powmat(A, n / 2, M);
        if ((n & 1) == 0) return mulmat(t, t, M);
        return mulmat(mulmat(t, t, M), A, M);
    }
    public long[] mulmat(long[][] A, long[] x, int M)
    {
        var ans = new long[A.Length];
        for (int i = 0; i < A.Length; i++) for (int j = 0; j < x.Length; j++) ans[i] = (ans[i] + x[j] * A[i][j]) % M;
        return ans;
    }
    public long[][] mulmat(long[][] A, long[][] B, int M)
    {
        var ans = new long[A.Length][];
        for (int i = 0; i < A.Length; i++)
        {
            ans[i] = new long[B[0].Length];
            for (int j = 0; j < B[0].Length; j++) for (int k = 0; k < B.Length; k++) ans[i][j] = (ans[i][j] + A[i][k] * B[k][j]) % M;
        }
        return ans;
    }
    public long powmod(long a, long b, long M)
    {
        if (a == 0) return 0;
        if (b == 0) return 1;
        var t = powmod(a, b / 2, M);
        if ((b & 1) == 0) return t * t % M;
        return t * t % M * a % M;
    }
    public long gcd(long a, long b)
    {
        while (b > 0) { var t = a % b; a = b; b = t; }
        return a;
    }
    public long lcm(long a, long b) { return a * (b / gcd(a, b)); }
    public long Comb(int n, int r)
    {
        const int M = 1000000007;
        if (n < 0 || r < 0 || r > n) return 0;
        if (n - r < r) r = n - r;
        if (r == 0) return 1;
        if (r == 1) return n;
        var numerator = new int[r];
        var denominator = new int[r];
        for (int k = 0; k < r; k++)
        {
            numerator[k] = n - r + k + 1;
            denominator[k] = k + 1;
        }
        for (int p = 2; p <= r; p++)
        {
            int pivot = denominator[p - 1];
            if (pivot > 1)
            {
                int offset = (n - r) % p;
                for (int k = p - 1; k < r; k += p)
                {
                    numerator[k - offset] /= pivot;
                    denominator[k] /= pivot;
                }
            }
        }
        long result = 1;
        for (int k = 0; k < r; k++) if (numerator[k] > 1) result = result * numerator[k] % M;
        return result;
    }
}
0