結果
問題 |
No.551 夏休みの思い出(2)
|
ユーザー |
|
提出日時 | 2025-04-25 22:14:58 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,495 bytes |
コンパイル時間 | 2,152 ms |
コンパイル使用メモリ | 202,696 KB |
実行使用メモリ | 7,848 KB |
最終ジャッジ日時 | 2025-04-25 22:15:30 |
合計ジャッジ時間 | 22,427 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 2 WA * 45 |
ソースコード
#include<bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; int P,R,A,B,C,val[35010],base,lim,ans[10],len; unordered_map<int,int>M; int Pow(int A,int B,const int P){ int res = 1; while(B){ if(B&1){res = 1ll*A*res%P;} A = 1ll*A*A%P; B >>= 1; } return res; } void solve(const int P){ cin >> A >> B >> C;len = 0; int sq = ((1ll*B*B-4ll*A*C)%P+P)%P,tmp = sq,nowti = -1; if(sq == 0){ int PL12 = 1ll*(P-B)%P*Pow(2*A,P-2,P)%P; cout << PL12 << "\n"; return; } for(int i = 0;i <= lim;++i){ if(M.find(tmp) != M.end()){ nowti = i*base+M[tmp]; break; } } if(nowti == -1||(nowti&1)){cout << "-1\n";return;} int Mig = nowti/2,Yak = ((nowti+P-1)/2)%(P-1),JF17 = Pow(2*A,P-2,P); Mig = Pow(R,Mig,P);Yak = Pow(R,Yak,P); ans[++len] = 1ll*(Mig-B+P)*JF17%P; ans[++len] = (1ll*(-Mig-B+P)*JF17%P+P)%P; ans[++len] = 1ll*(Yak-B+P)*JF17%P; ans[++len] = (1ll*(-Yak-B+P)*JF17%P+P)%P; sort(ans+1,ans+1+len);len = unique(ans+1,ans+1+len)-ans-1; for(int i = 1;i <= len;++i){cout << ans[i] << " ";}cout << "\n"; } void init(const int P){ lim = sqrt(P)+1; int ti = 0,va = 1;val[0] = 1; while(ti <= lim){ val[1] = va;M[va] = base = ti; ++ti;va = 1ll*va*R%P; } for(int i = 2;i <= lim;++i){val[i] = 1ll*val[i-1]*val[1]%P;} } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); // freopen("equation.in","r",stdin); // freopen("equation.out","w",stdout); cin >> P >> R;init(P); int T = 1;cin >> T; for(int i = 1;i <= T;++i){solve(P);} return 0; }