結果
| 問題 |
No.1259 スイッチ
|
| コンテスト | |
| ユーザー |
yuruhiya
|
| 提出日時 | 2020-10-17 10:35:40 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,339 bytes |
| コンパイル時間 | 530 ms |
| コンパイル使用メモリ | 51,328 KB |
| 最終ジャッジ日時 | 2025-01-15 10:37:25 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 2 WA * 59 |
ソースコード
#pragma GCC optimize("O3")
#pragma GCC target("avx2")
#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize ("Ofast")
#include <cstdio>
#include <vector>
using namespace std;
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define FOR(i, m, n) for (int i = (m); i < (n); ++i)
#define rrep(i, n) for (int i = (n)-1; i >= 0; --i)
#define rfor(i, m, n) for (int i = (m); i >= (n); --i)
using ll = long long;
#ifdef _WIN32
#define getchar_unlocked _getchar_nolock
#define putchar_unlocked _putchar_nolock
#define fwrite_unlocked _fwrite_nolock
#define fread_unlocked _fread_nolock
#endif
#if __has_include("dump.hpp")
#include "dump.hpp"
#else
#define dump(...) ((void)0)
#endif
// #define USE_FREAD
#ifdef USE_FREAD
struct Input {
static constexpr size_t MAX_SIZE = 4400019;
char buf[MAX_SIZE];
size_t i, end;
Input() {
i = 0;
end = fread_unlocked(buf, 1, MAX_SIZE, stdin);
}
inline int gc() {
if (i < end) {
return buf[i++];
} else {
return EOF;
}
}
} in;
#define gc in.gc
#else
#define gc getchar_unlocked
#endif // USE_FREAD
// #define USE_FWRITE
#ifdef USE_FWRITE
struct Output {
static constexpr size_t MAX_SIZE = 4000009;
char buf[MAX_SIZE];
size_t i = 0;
void pc(int c) {
buf[i++] = c;
}
~Output() {
fwrite_unlocked(buf, 1, i, stdout);
}
} out;
#define pc out.pc
#else
#define pc putchar_unlocked
#endif // USE_FWRITE
inline void ini(int& v) noexcept {
v = 0;
char c = gc();
bool f = false;
if (c == '-') {
f = true;
c = gc();
}
for (; '0' <= c && c <= '9'; c = gc())
v = v * 10 + (c - '0');
if (f) v = -v;
}
inline void inui(int& v) noexcept {
v = 0;
for (char c = gc(); '0' <= c && c <= '9'; c = gc())
v = v * 10 + (c - '0');
}
inline void inl(ll& v) noexcept {
v = 0;
char c = gc();
bool f = false;
if (c == '-') {
f = true;
c = gc();
}
for (; '0' <= c && c <= '9'; c = gc())
v = v * 10 + (c - '0');
if (f) v = -v;
}
inline void inul(ll& v) noexcept {
v = 0;
for (char c = gc(); '0' <= c && c <= '9'; c = gc())
v = v * 10 + (c - '0');
}
inline void ins(char* c, int n) noexcept {
while (n--) {
*c = gc();
++c;
}
}
inline void puti(int v) noexcept {
if (v < 0) pc('-'), v = -v;
char b[10];
int n = 0;
while (v)
b[n++] = '0' + v % 10, v /= 10;
if (!n) b[n++] = '0';
while (n--)
pc(b[n]);
}
inline void putui(int v) noexcept {
char b[10];
int n = 0;
while (v)
b[n++] = '0' + v % 10, v /= 10;
if (!n) b[n++] = '0';
while (n--)
pc(b[n]);
}
inline void putl(ll v) noexcept {
if (v < 0) pc('-'), v = -v;
char b[20];
int n = 0;
while (v)
b[n++] = '0' + v % 10, v /= 10;
if (!n) b[n++] = '0';
while (n--)
pc(b[n]);
}
inline void putul(ll v) noexcept {
char b[20];
int n = 0;
while (v)
b[n++] = '0' + v % 10, v /= 10;
if (!n) b[n++] = '0';
while (n--)
pc(b[n]);
}
// ---------------------------------------------------------------- //
constexpr ll MOD = 1000000007;
inline ll Powmod(ll a, ll n) {
ll r = 1;
while (n > 0) {
if (n & 1)
r = r * a % MOD, n--;
else
a = a * a % MOD, n >>= 1;
}
return r;
}
int main() {
ll n, m, k;
inul(n);
inul(m);
inul(k);
ll acc = 1, x = 0;
FOR(i, 1, n + 1) {
if (k % i == 0) {
x = (x + acc * Powmod(n, n - i)) % MOD;
}
acc = (acc * (n - i)) % MOD;
}
if (m == 1) {
putul(x);
} else {
putul((Powmod(n, n) - x) * Powmod(n - 1, MOD - 2) % MOD);
}
}
yuruhiya