結果

問題 No.176 2種類の切手
ユーザー snrnsidysnrnsidy
提出日時 2023-05-14 21:05:59
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 3,415 bytes
コンパイル時間 3,612 ms
コンパイル使用メモリ 348,028 KB
実行使用メモリ 8,756 KB
最終ジャッジ日時 2023-08-20 07:12:18
合計ジャッジ時間 6,685 ms
ジャッジサーバーID
(参考情報)
judge12 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 AC 2 ms
4,376 KB
testcase_03 TLE -
testcase_04 -- -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
testcase_24 -- -
testcase_25 -- -
testcase_26 -- -
testcase_27 -- -
testcase_28 -- -
testcase_29 -- -
testcase_30 -- -
testcase_31 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

#pragma GCC optimize("O3")
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")	
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping") 
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize("Ofast")
//#pragma GCC target("avx,avx2,fma") 
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") 
//#pragma GCC optimization ("unroll-loops")

#include <bits/stdc++.h>

using namespace std;

__int128 gcd(__int128 a,__int128 b)
{
  if(a < 0) a*=-1;
  if(b < 0) b*=-1;
  if(b>0) return gcd(b,a%b);
  return a;
}

__int128 inv(__int128 a,__int128 m)
{
  __int128 m0 = m, y = 0, x = 1;
  if(m==1) return 0;
  while(a>1)
  {
    __int128 q = a/m;
    __int128 t = m;
    m = a%m;
    a = t;
    t = y;
    y = x - q*y;
    x = t;
  }
  if(x<0) x += m0;
  return x;
}

bool func(__int128 A,__int128 B,__int128 C)
{
  if(A==0 && B==0)
  {
    if(C==0)
    {
      return true;
    }
    else
    {
      return false;
    }
  }
  if(A==0)
  {
    if(C%B==0) return true;
    else return false;
  }
  if(B==0)
  {
    if(C%A==0) return true;
    else return false;
  }

  __int128 g = gcd(A,B);
  if(C%g!=0)
  {
    return false;
  }
  if(g > 1)
  {
    return func(A/g,B/g,C/g);
  }
  else
  {
    __int128 c = inv(A,B);
    __int128 x = (c*C)%B;
    __int128 y = (C - (A*x))/B;
    if(y<0)
    {
      return false;
    }
    while(gcd(x,y)!=1 && y>=0)
    {
      x += B;
      y -= A;
    }
    if(y<0)
    {
      return false;
    }
    return true;
  }
  return false;
}
int main(void)
{
    cin.tie(0);
    ios::sync_with_stdio(false);

	long long int A,B,C;

	cin >> A >> B >> C;

    long long int g = gcd(A,B);

    long long int x = ceil((C*1.0)/g);

    while(1)
    {
        if(func(A,B,x*g))
        {
            cout << x*g << '\n';
            break;
        }
        x++;
    }
    return 0;
}
0