結果

問題 No.183 たのしい排他的論理和(EASY)
ユーザー mban
提出日時 2017-01-12 13:28:02
言語 C#
(mono 4.8.0)
結果
AC  
実行時間 2064 ms
コード長 1964 Byte
コンパイル時間 321 ms
使用メモリ 37000 KB

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
00_sample01.in AC 29 ms
14988 KB
00_sample02.in AC 30 ms
17036 KB
10_random_small01.in AC 30 ms
14996 KB
10_random_small02.in AC 30 ms
17048 KB
10_random_small03.in AC 29 ms
17044 KB
10_random_small04.in AC 30 ms
17040 KB
10_random_small05.in AC 31 ms
17052 KB
20_random_large01.in AC 2064 ms
37000 KB
20_random_large02.in AC 1200 ms
32932 KB
20_random_large03.in AC 843 ms
32924 KB
20_random_large04.in AC 1008 ms
34956 KB
20_random_large05.in AC 1321 ms
32928 KB
30_corner01.in AC 34 ms
19092 KB
30_corner02.in AC 29 ms
14988 KB
30_corner03.in AC 196 ms
15216 KB
30_corner04.in AC 1337 ms
32920 KB
system_test1.txt AC 1640 ms
32908 KB
system_test2.txt AC 168 ms
32884 KB
テストケース一括ダウンロード

ソースコード

diff #
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;

class Program
{
    static private Magatro M = new Magatro();
    static private void Main(string[]args)
    {
        M.Scan();
        M.Solve();
    }
}

public class Scanner
{
    private string[] S;
    private int Index;
    private char Separator;

    public Scanner(char separator = ' ')
    {
        Index = 0;
        Separator = separator;
    }

    private string[] Line()
    {
        return Console.ReadLine().Split(Separator);
    }

    public string Next()
    {
        string result;
        if (S == null || Index >= S.Length)
        {
            S = Line();
            Index = 0;
        }
        result = S[Index];
        Index++;
        return result;
    }
    public int NextInt()
    {
        return int.Parse(Next());
    }
    public double NextDouble()
    {
        return double.Parse(Next());
    }
    public long NextLong()
    {
        return long.Parse(Next());
    }
}

public class Magatro
{
    private int N;
    private int[] A;
    private const int Max = 1<<15;
    public void Scan()
    {
        Scanner sc = new Scanner();
        N = sc.NextInt();
        A = new int[N];
        for(int i = 0; i < N; i++)
        {
            A[i] = sc.NextInt();
        }
    }
    public void Solve()
    {
        bool[] dp = new bool[Max + 1];
        dp[0] = true;
        for(int i = 0; i < N; i++)
        {
            List<int> next = new List<int>();

            for(int j = 0; j <= Max; j++)
            {
                if (dp[j])
                {
                    next.Add(j ^ A[i]);
                }
            }
            for(int j = 0; j < next.Count; j++)
            {
                dp[next[j]] = true;
            }
        }
        Console.WriteLine(dp.Count(ss =>ss));
    }
}
0