結果

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

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
00_sample01.in AC 29 ms
14980 KB
00_sample02.in AC 31 ms
14984 KB
10_random_small01.in AC 30 ms
17040 KB
10_random_small02.in AC 36 ms
19092 KB
10_random_small03.in AC 31 ms
17040 KB
10_random_small04.in AC 31 ms
17052 KB
10_random_small05.in AC 29 ms
15016 KB
20_random_large01.in RE -
20_random_large02.in AC 1131 ms
32904 KB
20_random_large03.in AC 787 ms
32888 KB
20_random_large04.in AC 930 ms
37000 KB
20_random_large05.in AC 1214 ms
32908 KB
30_corner01.in RE -
30_corner02.in AC 28 ms
15004 KB
30_corner03.in AC 119 ms
17232 KB
30_corner04.in AC 1260 ms
34964 KB
system_test1.txt RE -
system_test2.txt AC 158 ms
32880 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<<14;
    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