結果
問題 | No.551 夏休みの思い出(2) |
ユーザー | はまやんはまやん |
提出日時 | 2017-07-31 03:55:13 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 56 ms / 4,000 ms |
コード長 | 3,061 bytes |
コンパイル時間 | 1,778 ms |
コンパイル使用メモリ | 168,896 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-10 23:01:23 |
合計ジャッジ時間 | 4,199 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 3 ms
5,248 KB |
testcase_04 | AC | 3 ms
5,248 KB |
testcase_05 | AC | 7 ms
5,248 KB |
testcase_06 | AC | 8 ms
5,248 KB |
testcase_07 | AC | 3 ms
5,248 KB |
testcase_08 | AC | 2 ms
5,248 KB |
testcase_09 | AC | 2 ms
5,248 KB |
testcase_10 | AC | 2 ms
5,248 KB |
testcase_11 | AC | 2 ms
5,248 KB |
testcase_12 | AC | 2 ms
5,248 KB |
testcase_13 | AC | 2 ms
5,248 KB |
testcase_14 | AC | 2 ms
5,248 KB |
testcase_15 | AC | 2 ms
5,248 KB |
testcase_16 | AC | 2 ms
5,248 KB |
testcase_17 | AC | 2 ms
5,248 KB |
testcase_18 | AC | 3 ms
5,248 KB |
testcase_19 | AC | 2 ms
5,248 KB |
testcase_20 | AC | 2 ms
5,248 KB |
testcase_21 | AC | 2 ms
5,248 KB |
testcase_22 | AC | 2 ms
5,248 KB |
testcase_23 | AC | 2 ms
5,248 KB |
testcase_24 | AC | 2 ms
5,248 KB |
testcase_25 | AC | 2 ms
5,248 KB |
testcase_26 | AC | 3 ms
5,248 KB |
testcase_27 | AC | 50 ms
5,248 KB |
testcase_28 | AC | 51 ms
5,248 KB |
testcase_29 | AC | 43 ms
5,248 KB |
testcase_30 | AC | 49 ms
5,248 KB |
testcase_31 | AC | 41 ms
5,248 KB |
testcase_32 | AC | 49 ms
5,248 KB |
testcase_33 | AC | 50 ms
5,248 KB |
testcase_34 | AC | 46 ms
5,248 KB |
testcase_35 | AC | 45 ms
5,248 KB |
testcase_36 | AC | 47 ms
5,248 KB |
testcase_37 | AC | 56 ms
5,248 KB |
testcase_38 | AC | 56 ms
5,248 KB |
testcase_39 | AC | 52 ms
5,248 KB |
testcase_40 | AC | 54 ms
5,248 KB |
testcase_41 | AC | 49 ms
5,248 KB |
testcase_42 | AC | 55 ms
5,248 KB |
testcase_43 | AC | 51 ms
5,248 KB |
testcase_44 | AC | 51 ms
5,248 KB |
testcase_45 | AC | 50 ms
5,248 KB |
testcase_46 | AC | 55 ms
5,248 KB |
testcase_47 | AC | 2 ms
5,248 KB |
testcase_48 | AC | 2 ms
5,248 KB |
ソースコード
#include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<b;i++) #define rrep(i,a,b) for(int i=a;i>=b;i--) #define fore(i,a) for(auto &i:a) #pragma GCC optimize ("-O3") using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); } //--------------------------------------------------------------------------------------------------- int mod = 1000000007; int add(int x, int y) { return (x += y) >= mod ? x - mod : x; } template<class... T> int add(int x, T... y) { return add(x, add(y...)); } int mul(int x, int y) { return 1LL * x * y % mod; } template<class... T> int mul(int x, T... y) { return mul(x, mul(y...)); } int sub(int x, int y) { return add(x, mod - y); } int modpow(int a, long long b) { int ret = 1; while (b > 0) { if (b & 1) ret = 1LL * ret * a % mod; a = 1LL * a * a % mod; b >>= 1; } return ret; } int modinv(int a) { return modpow(a, mod - 2); } int legendre(int a, int p) { mod = p;int ret=modpow(a,(p-1)/2);if(ret==p-1)ret=-1;return ret;} pair<int, int> mul(pair<int, int> &u, pair<int, int> &v, int w) { return {add(mul(u.first,v.first), mul(u.second,v.second,w)),add(mul(u.first,v.second),mul(u.second, v.first)) };}; int modsqrt(int a, int p) { mod = p;if (a == 0) return 0; if (p == 2) return a; if (modpow(a, (p - 1) / 2) != 1) return -1; int b=2;while(modpow((1LL*b*b-a+p)%p, (p - 1) / 2) == 1) b++;int w = (1LL * b * b - a + p) % p; int e = (p + 1) / 2;auto ret = make_pair(1, 0);auto v = make_pair(b, 1); while (e > 0) {if (e & 1) ret = mul(ret, v, w);v = mul(v, v, w);e /= 2;}return ret.first;} // ret == 0なら解1つ、!=0ならP-retも答え /*--------------------------------------------------------------------------------------------------- ∧_∧ ∧_∧ (´<_` ) Welcome to My Coding Space! ( ´_ゝ`) / ⌒i / \ | | / / ̄ ̄ ̄ ̄/ | __(__ニつ/ _/ .| .|____ \/____/ (u ⊃ ---------------------------------------------------------------------------------------------------*/ int P, R, Q, A, B, C; //--------------------------------------------------------------------------------------------------- int f() { return sub(0, mul(sub(mul(4, A, C), mul(B, B)), modinv(mul(4, A)), modinv(A))); } int rev(int x) { return sub(x, mul(modinv(2), modinv(A), B)); } //--------------------------------------------------------------------------------------------------- void _main() { cin >> P >> R >> Q; mod = P; rep(_, 0, Q) { cin >> A >> B >> C; int y = f(); if (legendre(y, P) < 0) { printf("-1\n"); continue; } int x = modsqrt(y, P); if (x == 0) printf("%d\n", rev(0)); else { int y = P - x; x = rev(x), y = rev(y); if (x > y) swap(x, y); printf("%d %d\n", x, y); } } }