結果
| 問題 | No.377 背景パターン |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-09-22 18:03:05 |
| 言語 | C++17(clang) (clang++ 22.1.8 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 369 ms / 5,000 ms |
| + 880µs | |
| コード長 | 1,834 bytes |
| 記録 | |
| コンパイル時間 | 6,938 ms |
| コンパイル使用メモリ | 167,560 KB |
| 実行使用メモリ | 9,916 KB |
| 最終ジャッジ日時 | 2026-09-22 18:03:14 |
| 合計ジャッジ時間 | 4,801 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge5_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 14 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
long long i, j, l, r, mid, p, q, k, t, n, m, a, b, c, d, h, w, ans, cnt, res;
const long long mod = 1e9 + 7, mod2 = 999993469, inf = 1e18;
string s;
bool check;
map <long long, long long> mp, mp2;
vector <long long> cur, cur2;
long long binpow (long long a, long long b, long long mod){
a %= mod;
long long res = 1;
while (b > 0){
if (b % 2 == 1){
res = res * a % mod;
}
a = a * a % mod;
b /= 2;
}
return res;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> h >> w >> k;
for (a = 1; a <= sqrtl(h); a += 1){
if (h % a == 0){
cur.push_back(a);
if (h / a != a){
cur.push_back(h / a);
}
}
}
sort(cur.begin(), cur.end());
m = cur.size();
for (i = m - 1; i >= 0; i -= 1){
p = cur[i];
mp[p] = h / p;
for (j = m - 1; j >= i + 1; j -= 1){
if (cur[j] % p == 0){
mp[p] -= mp[cur[j]];
}
}
}
for (a = 1; a <= sqrtl(w); a += 1){
if (w % a == 0){
cur2.push_back(a);
if (w / a != a){
cur2.push_back(w / a);
}
}
}
sort(cur2.begin(), cur2.end());
m = cur2.size();
for (i = m - 1; i >= 0; i -= 1){
p = cur2[i];
mp2[p] = w / p;
for (j = m - 1; j >= i + 1; j -= 1){
if (cur2[j] % p == 0){
mp2[p] -= mp2[cur2[j]];
}
}
}
// for (i = 0; i < m; i += 1){
// cout << cur2[i] << " " << mp2[cur2[i]] << "\n";
// }
ans = 0;
for (a = 0; a < cur.size(); a += 1){
for (b = 0; b < cur2.size(); b += 1){
p = cur[a];
q = cur2[b];
// cout << p << " " << q << " " << p * q % mod * __gcd(h / p, w / q) % mod << " " << mp[p] << " " << mp2[q] << "\n";
ans = (ans + binpow(k, p * q % (mod - 1) * __gcd(h / p, w / q) % (mod - 1), mod) * mp[p] % mod * mp2[q] % mod) % mod;
}
}
cout << ans * binpow(h * w, mod - 2, mod) % mod << "\n";
}
vjudge1