提出 #69350415


ソースコード 拡げる

#include <bits/stdc++.h>

using namespace std;

#define int long long

#define fileio(x,y) freopen(x,"r",stdin),freopen(y,"w",stdout)
#define tup tuple<int,int,int>
#define fir(x) (get<0>(x))
#define sec(x) (get<1>(x))
#define thr(x) (get<2>(x))
#define pii pair<int,int>
#define bit(x) bitset<x>
#define pb emplace_back
#define i12 __int128_t
#define mt make_tuple
#define mp make_pair

const int	mod=998244353;
const int	maxn=2e5+10;

string  s;
int     p[maxn];
int     n,k,ttt;

// ax+by = 1
int exgcd(int x,int y,int &a,int &b) { if(!y) return a=1,b=0,x; int t=exgcd(y,x%y,a,b); b=a-x/y*(a=b); return t; }

string getstr(tup x)
{
    int xl=fir(x),xr=sec(x),xn=thr(x),xln=to_string(xr).size();
    string xx=(xl? to_string(xl):"")+s; for(int i=0; i<xn-xln; i++) xx+='0'; xx+=(xn? to_string(xr):"");
    return xx;
}

bool cmp(tup x,tup y)
{
    // cerr<<fir(x)<<' '<<sec(x)<<' '<<thr(x)<<'\n';
    int xl=fir(x),xn=thr(x),xln=to_string(xl).size()-(!xl),xtot=xln+n+xn;
    int yl=fir(y),yn=thr(y),yln=to_string(yl).size()-(!yl),ytot=yln+n+yn;
    if(xtot!=ytot) return xtot<ytot;
    return getstr(x)<getstr(y);
}

void work()
{
    /* Code */
    ttt=0;
    cin>>k>>s; int val=0; n=s.size();
    int x=0,kk=k; while(kk) x++,kk/=10;
    int p10s=1; tup tar(1e8,1e8,11);
    for(int i=0; i<n; i++) val=(val*10+s[i]-'0')%k,p10s=p10s*10%k;
    for(int r=0,rval=val; r<=x/2; r++,rval=rval*10%k)
    {
        for(int rv=0; rv<p[r]; rv++)
        {
            int v=(rval+rv)%k;
            int lbase=p10s*(p[r]%k)%k;
            // calc min x -> x*lbase + v = 0 (mod k)
            // x*lbase + pk = k - v
            // cerr<<r<<' '<<rv<<' '<<p10s<<' '<<lbase<<' '<<val<<' '<<v<<' '<<k<<'\n';
            tup res;
            // if(v)
            {
                // 10x+15p=10 -> 2x+3p=2
                int x,p; int g=exgcd(lbase,k,x,p);
                if((k-v)%g) continue;
                int c=(k-v)/g; x*=c;
                // cerr<<x<<' '<<p*c<<'\n';
                int kk=k/g,minx=x%kk+kk*(x%kk<0);
                res=mt(minx,rv,r);
            }
            // else res=mt(0,rv,r);
            if(cmp(res,tar)) tar=res;
        }
    }
    int rval=val*(p[x-x/2]%k)%k;
    for(int l=x/2; l>=0; l--,rval=rval*10%k)
    {
        int r=x-l;
        for(int lv=0; lv<p[l]; lv++)
        {
            int v=lv%k*p10s%k*p[r]%k;
            (v+=rval)%=k;
            // calc min x -> x + v = 0 (mod k)
            int x=k-v;
            if(x>=p[r]) continue;
            if(cmp(mt(lv,x,r),tar)) tar=mt(lv,x,r);
        }
    }
    // cerr<<fir(tar)<<' '<<sec(tar)<<' '<<thr(tar)<<'\n';
    cout<<getstr(tar)<<'\n';
    return;
}

signed main()
{
    // fileio(".in",".out");
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t,stTime=clock();
    cin>>t;
    p[0]=1; for(int i=1; i<=18; i++) p[i]=p[i-1]*10;
    while(t--) work();
    // cerr<<"Time : "<<(double)(clock()-stTime)/CLOCKS_PER_SEC<<'\n';
    return 0;
} // Cellinia Texas.

提出情報

提出日時
問題 G - Small Multiple 2
ユーザ NINLER
言語 C++ 20 (gcc 12.2)
得点 0
コード長 3059 Byte
結果 WA
実行時間 513 ms
メモリ 5428 KiB

コンパイルエラー

Main.cpp: In function ‘long long int exgcd(long long int, long long int, long long int&, long long int&)’:
Main.cpp:27:99: warning: operation on ‘a’ may be undefined [-Wsequence-point]
   27 | int exgcd(int x,int y,int &a,int &b) { if(!y) return a=1,b=0,x; int t=exgcd(y,x%y,a,b); b=a-x/y*(a=b); return t; }
      |                                                                                                 ~~^~~
Main.cpp: In function ‘int main()’:
Main.cpp:101:11: warning: unused variable ‘stTime’ [-Wunused-variable]
  101 |     int t,stTime=clock();
      |           ^~~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 600
結果
AC × 1
AC × 35
WA × 24
セット名 テストケース
Sample 00-sample-01.txt
All 00-sample-01.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, 01-36.txt, 01-37.txt, 01-38.txt, 01-39.txt, 01-40.txt, 01-41.txt, 01-42.txt, 01-43.txt, 01-44.txt, 01-45.txt, 01-46.txt, 01-47.txt, 01-48.txt, 01-49.txt, 01-50.txt, 01-51.txt, 01-52.txt, 01-53.txt, 01-54.txt, 01-55.txt, 01-56.txt, 01-57.txt, 01-58.txt
ケース名 結果 実行時間 メモリ
00-sample-01.txt AC 3 ms 3568 KiB
01-01.txt AC 6 ms 4136 KiB
01-02.txt WA 5 ms 3708 KiB
01-03.txt WA 3 ms 3620 KiB
01-04.txt WA 1 ms 3580 KiB
01-05.txt AC 9 ms 5344 KiB
01-06.txt AC 6 ms 3700 KiB
01-07.txt WA 5 ms 3652 KiB
01-08.txt AC 3 ms 3572 KiB
01-09.txt AC 9 ms 5356 KiB
01-10.txt AC 47 ms 3704 KiB
01-11.txt AC 284 ms 3644 KiB
01-12.txt AC 273 ms 3580 KiB
01-13.txt WA 16 ms 3612 KiB
01-14.txt WA 73 ms 3656 KiB
01-15.txt WA 55 ms 3440 KiB
01-16.txt AC 6 ms 4292 KiB
01-17.txt WA 5 ms 3700 KiB
01-18.txt WA 3 ms 3756 KiB
01-19.txt WA 1 ms 3568 KiB
01-20.txt AC 8 ms 5320 KiB
01-21.txt AC 6 ms 3632 KiB
01-22.txt AC 5 ms 3640 KiB
01-23.txt WA 3 ms 3636 KiB
01-24.txt AC 12 ms 5340 KiB
01-25.txt AC 57 ms 3708 KiB
01-26.txt AC 282 ms 3704 KiB
01-27.txt AC 278 ms 3572 KiB
01-28.txt AC 12 ms 3708 KiB
01-29.txt WA 69 ms 3640 KiB
01-30.txt WA 62 ms 3580 KiB
01-31.txt WA 8 ms 4840 KiB
01-32.txt WA 69 ms 3704 KiB
01-33.txt WA 403 ms 3480 KiB
01-34.txt WA 444 ms 3560 KiB
01-35.txt AC 13 ms 5200 KiB
01-36.txt WA 22 ms 3712 KiB
01-37.txt AC 129 ms 3640 KiB
01-38.txt AC 130 ms 3528 KiB
01-39.txt AC 12 ms 5384 KiB
01-40.txt AC 49 ms 3780 KiB
01-41.txt AC 276 ms 3636 KiB
01-42.txt AC 269 ms 3568 KiB
01-43.txt AC 12 ms 5332 KiB
01-44.txt AC 55 ms 3560 KiB
01-45.txt AC 374 ms 3520 KiB
01-46.txt AC 346 ms 3580 KiB
01-47.txt AC 10 ms 5428 KiB
01-48.txt AC 61 ms 3692 KiB
01-49.txt AC 351 ms 3776 KiB
01-50.txt AC 339 ms 3508 KiB
01-51.txt AC 9 ms 4832 KiB
01-52.txt WA 80 ms 3760 KiB
01-53.txt WA 513 ms 3604 KiB
01-54.txt WA 511 ms 3500 KiB
01-55.txt AC 8 ms 4628 KiB
01-56.txt WA 15 ms 3680 KiB
01-57.txt WA 57 ms 3624 KiB
01-58.txt WA 67 ms 3576 KiB