結果
| 問題 |
No.2592 おでぶなおばけさん 2
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-12-21 01:49:39 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,067 bytes |
| コンパイル時間 | 3,763 ms |
| コンパイル使用メモリ | 205,420 KB |
| 最終ジャッジ日時 | 2025-02-18 12:51:45 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 76 WA * 7 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
unsigned long long xor64() {
static unsigned long long x
= (unsigned long long)(chrono::duration_cast<chrono::nanoseconds>(
chrono::high_resolution_clock::now().time_since_epoch()).count())
* 10150724397891781847ULL;
x ^= x << 7;
return x ^= x >> 9;
}
struct Miller_Rabin {
unsigned long long mul_mod(unsigned long long a, unsigned long long b, unsigned long long m) {
unsigned long long ans = 0;
#ifdef LOCAL
if(a > b) std::swap(a, b);
while(b){
if(b & 1){
ans += a;
if(ans >= m) ans -= m;
}
if((a <<= 1) >= m) a -= m;
b >>= 1;
}
#else
ans = (unsigned long long)((__int128)(a) * (__int128)(b) % m);
#endif
return ans;
}
unsigned long long pow_mod(unsigned long long x, unsigned long long n, unsigned long long m) {
if (m == 1) return 0;
unsigned long long r = 1;
unsigned long long y = x % m;
while (n) {
if (n & 1) r = mul_mod(r, y, m);
y = mul_mod(y, y, m);
n >>= 1;
}
return r;
}
bool is_prime(unsigned long long n) {
if (n <= 1) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
unsigned long long d = n - 1;
while (d % 2 == 0) d /= 2;
static std::vector<std::vector<long long>>
bases = {{2, 6, 61}, {2, 325, 9375, 28178, 450775, 9780504, 1795265022}};
for (long long a : bases[d > 4759123141]) {
unsigned long long t = d;
unsigned long long y = pow_mod(a, t, n);
if(a % n){
while (t != n - 1 && y != 1 && y != n - 1) {
y = mul_mod(y, y, n);
t <<= 1;
}
}
if (y != n - 1 && t % 2 == 0) return false;
}
return true;
}
};
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
clock_t finish = clock() + CLOCKS_PER_SEC / 1000 * 960;
ll n, q, k;
cin >> n >> q >> k;
vector<ll> a(n);
vector<int> s(n + 1);
vector<pair<int,int>> query(q);
vector<bool> ans(q);
Miller_Rabin MR;
for(auto &&v : a) cin >> v;
for(auto &&[l, r] : query) cin >> l >> r, l--;
while(clock() <= finish){
int mod = xor64() & 2147483647;
while(!MR.is_prime(mod)) mod = xor64() & 2147483647;
auto safe = [&](long long v){
v %= mod;
if(v < 0) v += mod;
return v;
};
int d = 1;
for(int i = 0; i < n; i++){
s[i + 1] = safe(s[i] + a[i] * d);
d = safe(d * k);
}
for(int i = 0; i < q; i++){
if(ans[i]) continue;
auto [l, r] = query[i];
ans[i] = s[r] != s[l];
}
}
for(auto &&flg : ans) cout << (flg ? "Yes" : "No") << '\n';
}