結果
| 問題 |
No.3365 Prefix and Suffix X
|
| コンテスト | |
| ユーザー |
tau1235
|
| 提出日時 | 2025-11-17 23:07:18 |
| 言語 | C++17(gnu拡張) (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 832 ms / 2,000 ms |
| コード長 | 1,397 bytes |
| コンパイル時間 | 1,934 ms |
| コンパイル使用メモリ | 204,148 KB |
| 実行使用メモリ | 7,716 KB |
| 最終ジャッジ日時 | 2025-11-17 23:07:55 |
| 合計ジャッジ時間 | 27,890 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 30 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using lll=__int128_t;
lll modinv(lll a, lll m) {
lll b = m, u = 1, v = 0;
while (b) {
lll t = a / b;
a -= t * b; swap(a, b);
u -= t * v; swap(u, v);
}
u %= m;
if (u < 0) u += m;
return u;
}
lll f(lll a,lll b,lll mod){
lll g=gcd(gcd(a,b),mod);
a/=g;
b/=g;
mod/=g;
if (gcd(a,mod)==1) return (modinv(a,mod)*b)%mod;
else return -1;
}
void solve(){
vector<lll> ten(20);
ten[0]=1;
for (int i=1;i<20;i++) ten[i]=ten[i-1]*10;
string x;
ll m;
cin>>x>>m;
int nx=x.size();
for (int nz=0;nz+nx*2<=18;nz++){
lll p=ten[nx+nz]+ten[0];
lll b=((-p*stoll(x))%m+m)%m;
lll a=ten[nx];
ll z=f(a,b,m);
if (z!=-1){
string z2=to_string(z);
if (nz<z2.size()) continue;
while (nz>z2.size()) z2="0"+z2;
string ans=x+z2+x;
assert(stoll(ans)%m==0);
cout<<ans<<endl;
return;
}
}
auto check=[&](string s){
int n=s.size();
bool ok=stoll(s)%m==0;
for (int i=0;i<nx;i++){
ok&=s[i]==x[i];
ok&=s[n-nx+i]==x[i];
}
return ok;
};
for (int i=0;i<=nx;i++){
string ans=x;
for (int j=i;j<nx;j++) ans+=x[j];
if (check(ans)){
cout<<ans<<endl;
assert(stoll(ans)%m==0);
return;
}
}
cout<<-1<<endl;
}
int main(){
int t;
cin>>t;
while (t--) solve();
}
tau1235