結果

問題 No.573 a^2[i] = a[i]
ユーザー Mohamed Thaer
提出日時 2025-05-13 05:50:09
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 48 ms / 2,000 ms
コード長 2,309 bytes
コンパイル時間 2,309 ms
コンパイル使用メモリ 198,148 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2025-05-13 05:50:13
合計ジャッジ時間 4,330 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 47
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘void Thaer()’:
main.cpp:96:16: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   96 |         freopen("input.txt", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:97:16: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   97 |         freopen("output.txt", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
//#define int int64_t
#define el '\n'
namespace combinatorics {
    int64_t MOD = 1e9 + 7;
    int size = 0;
    vector<int> _fact = {1};
    vector<int> _invfact = {1};
    vector<int> _inv = {1};
    int64_t pw(int64_t n, int64_t e) {
        int64_t ans = 1;
        for (; e; n = n * n % MOD, e /= 2)
            if (e & 1)
                ans = ans * n % MOD;
        return ans;
    }

    void init(int N) {
        _fact.resize(N + 1);
        _invfact.resize(N + 1);
        _inv.resize(N + 1);
        for (int64_t i = size + 1; i <= N; i++) {
            _fact[i] = _fact[i - 1] * i % MOD;
        }
        _invfact[N] = pw(_fact[N], MOD - 2);
        for (int i = N; i >= size + 1; i--) {
            _invfact[i - 1] = 1LL * _invfact[i] * i % MOD;
            _inv[i] = 1LL * _invfact[i] * _fact[i - 1] % MOD;
        }
        size = N;
    }

    int64_t fact(int n) {
        if (n > size) init(2 * n);
        return _fact[n];
    }

    int64_t invfact(int n) {
        if (n > size)init(2 * n);
        return _invfact[n];
    }

    int64_t inv(int n) {
        if (n > size)init(2 * n);
        return _inv[n];
    }
    int64_t npr(int n, int r) {
        if (n < r)return 0;
        return fact(n) * invfact(n - r) % MOD;
    }

    int64_t ncr(int n, int r) {
        return npr(n, r) * invfact(r) % MOD;
    }

    int64_t catalan(int n) {
        return ncr(2 * n, n) * inv(n + 1) % MOD;
    }

    int64_t stars_and_bars(int star, int bar) {
        return ncr(star + bar - 1, star);
    }
}
using namespace combinatorics;
int64_t pw(int64_t n , int64_t e,int64_t mod) {
    int64_t ans = 1;
    for (; e; n = n * n % mod, e /= 2)
        if (e & 1) ans = ans * n % mod;
    return ans;

}
void Main() {
    int n;
    cin >> n;
    int64_t ans = 0;
    for (int i = 1; i <= n; ++i) {
        ans += (ncr(n, i) * pw(i, n - i, MOD)) % MOD;
        ans %= MOD;
    }
    cout << ans;
}
void Thaer();
int32_t main() {
    cin.tie(0)->sync_with_stdio(0);
    // Thaer();
    int T = 1;
    // cin >> T;
    for (int i = 1; i <= T; ++i) {
        Main();
        // if (i != T)cout << el;
    }
}
void Thaer() {
    if (fopen("input.txt", "r")) {
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    }
}
0