結果

問題 No.1142 XOR と XOR
ユーザー kakel-san
提出日時 2025-07-05 01:54:58
言語 C#
(.NET 8.0.404)
結果
AC  
実行時間 1,029 ms / 2,000 ms
コード長 2,079 bytes
コンパイル時間 9,756 ms
コンパイル使用メモリ 169,604 KB
実行使用メモリ 207,816 KB
最終ジャッジ日時 2025-07-05 01:55:27
合計ジャッジ時間 27,136 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 25
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (120 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net8.0/main.dll
  main -> /home/judge/data/code/bin/Release/net8.0/publish/

ソースコード

diff #

using System;
using static System.Console;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static int NN => int.Parse(ReadLine());
    static int[] NList => ReadLine().Split().Select(int.Parse).ToArray();
    static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray();
    public static void Main()
    {
        Solve();
        // Test();
    }
    static void Test()
    {
        var r = new Random();
        var n = 200000;
        var m = 200000;
        var k = 1;
        var a = new int[n];
        for (var i = 0; i < n; ++i) a[i] = r.Next(1024);
        var b = new int[m];
        for (var i = 0; i < m; ++i) b[i] = r.Next(1024);
        var start = DateTime.Now;
        WriteLine(Xor(n, m, k, a, b));
        WriteLine((DateTime.Now - start).TotalSeconds);
    }
    static void Solve()
    {
        var c = NList;
        var (n, m, k) = (c[0], c[1], c[2]);
        var a = NList;
        var b = NList;
        WriteLine(Xor(n, m, k, a, b));
    }
    static long Xor(int n, int m, int k, int[] a, int[] b)
    {
        var adp = new long[1024];
        var ndp = new long[1024];
        var acnt = new long[1024];
        var mod = 1_000_000_007;
        for (var i = 0; i < n; ++i)
        {
            for (var j = 0; j < adp.Length; ++j)
            {
                acnt[j ^ a[i]] += ndp[j ^ a[i]] = adp[j];
            }
            ++ndp[a[i]];
            ++acnt[a[i]];
            (adp, ndp) = (ndp, adp);
        }
        var bdp = new long[1024];
        var bcnt = new long[1024];
        for (var i = 0; i < m; ++i)
        {
            for (var j = 0; j < bdp.Length; ++j)
            {
                bcnt[j ^ b[i]] += ndp[j ^ b[i]] = bdp[j];
            }
            ++ndp[b[i]];
            ++bcnt[b[i]];
            (bdp, ndp) = (ndp, bdp);
        }
        var ans = 0L;
        for (var i = 0; i < acnt.Length; ++i) ans = (ans + acnt[i] % mod * (bcnt[i ^ k] % mod) % mod) % mod;
        return ans;
    }
}
0