結果

問題 No.685 Logical Operations
コンテスト
ユーザー 👑 kakel-san
提出日時 2026-10-22 00:06:22
言語 C#
(.NET 10.0.403 + ACL)
コンパイル:
dotnet_c
実行:
/usr/bin/dotnet_wrap
結果
AC  
実行時間 41 ms / 2,000 ms
+ 791µs
コード長 2,118 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 7,315 ms
コンパイル使用メモリ 166,444 KB
実行使用メモリ 31,232 KB
最終ジャッジ日時 2026-10-22 00:06:49
合計ジャッジ時間 10,493 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 27
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (231 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net10.0/main.dll
  main -> /home/judge/data/code/bin/Release/net10.0/publish/

ソースコード

diff #
raw source code

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

class Program
{
    static int NN => int.Parse(ReadLine());
    static long[] NList => ReadLine().Split().Select(long.Parse).ToArray();
    public static void Main()
    {
        var n = long.Parse(ReadLine());
        if (n < 3)
        {
            WriteLine(0);
            return;
        }
        var tmp = n;
        var len = 0;
        while (tmp > 0)
        {
            tmp >>= 1;
            ++len;
        }
        var mod = 1_000_000_007;
        var dp = new long[16];
        // x:1 y:2 x=y=1:4 y=n:8
        dp[10] = 1;
        for (var b = len - 2; b >= 0; --b)
        {
            var ndp = new long[16];
            ndp[0] += dp[0] + dp[1] + dp[2];
            ndp[1] += dp[0] + dp[1] + dp[2];
            ndp[2] += dp[0] + dp[1] + dp[2] + 1;
            ndp[4] += dp[4] + dp[5] + dp[6] + dp[7];
            ndp[5] += dp[4] + dp[5] + dp[6] + dp[7];
            ndp[6] += dp[4] + dp[5] + dp[6] + dp[7];
            ndp[7] += dp[0] + dp[1] + dp[2] + dp[4] + dp[5] + dp[6] + dp[7];
            if (((n >> b) & 1) == 0)
            {
                ndp[8] += dp[8] + dp[9] + dp[10];
                ndp[9] += dp[8] + dp[9] + dp[10];
                ndp[12] += dp[12] + dp[13] + dp[14] + dp[15];
                ndp[13] += dp[12] + dp[13] + dp[14] + dp[15];
            }
            else
            {
                ndp[0] += dp[8] + dp[9] + dp[10];
                ndp[1] += dp[8] + dp[9] + dp[10];
                ndp[4] += dp[12] + dp[13] + dp[14] + dp[15];
                ndp[5] += dp[12] + dp[13] + dp[14] + dp[15];
                ndp[10] += dp[8] + dp[9] + dp[10];
                ndp[14] += dp[12] + dp[13] + dp[14] + dp[15];
                ndp[15] += dp[8] + dp[9] + dp[10] + dp[12] + dp[13] + dp[14] + dp[15];
            }
            for (var i = 0; i < ndp.Length; ++i) ndp[i] %= mod;
            dp = ndp;
        }
        WriteLine((dp[4] + dp[5] + dp[6] + dp[7] + dp[12] + dp[13] + dp[14] + dp[15]) % mod);
    }
}
0