結果

問題 No.2125 Inverse Sum
ユーザー 👑 p-adic
提出日時 2022-11-18 22:59:15
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,903 bytes
コンパイル時間 1,954 ms
コンパイル使用メモリ 196,344 KB
最終ジャッジ日時 2025-02-08 22:17:55
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 21 WA * 9
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define TYPE_OF( VAR ) remove_const<remove_reference<decltype( VAR )>::type >::type
#define UNTIE ios_base::sync_with_stdio( false ); cin.tie( nullptr )
#define CEXPR( LL , BOUND , VALUE ) constexpr const LL BOUND = VALUE
#define CIN( LL , A ) LL A; cin >> A
#define ASSERT( A , MIN , MAX ) assert( MIN <= A && A <= MAX )
#define CIN_ASSERT( A , MIN , MAX ) CIN( TYPE_OF( MAX ) , A ); ASSERT( A , MIN , MAX )
#define FOR( VAR , INITIAL , FINAL_PLUS_ONE ) for( TYPE_OF( FINAL_PLUS_ONE ) VAR = INITIAL ; VAR < FINAL_PLUS_ONE ; VAR ++ )
#define FOREQ( VAR , INITIAL , FINAL ) for( TYPE_OF( FINAL ) VAR = INITIAL ; VAR <= FINAL ; VAR ++ )
#define FOREQINV( VAR , INITIAL , FINAL ) for( TYPE_OF( INITIAL ) VAR = INITIAL ; VAR >= FINAL ; VAR -- )
#define QUIT return 0
#define RETURN( ANSWER ) cout << ( ANSWER ) << "\n"; QUIT
class NM
{
public :
ll m_N;
ll m_M;
inline NM( const ll& N = 0 , const ll& M = 0 ) : m_N( N ) , m_M( M ) {};
};
inline bool operator<( const NM& NM0 , const NM& NM1 ) { return NM0.m_N < NM1.m_N; }
int main()
{
CEXPR( ll , bound_PQ , 1000000000 );
CIN_ASSERT( P , 1 , bound_PQ );
CIN_ASSERT( Q , 1 , bound_PQ );
CEXPR( ll , rQ , 31622 );
NM answer[rQ];
// N = ab , M = bc , b = gcd( N , M )
// 1/N + 1/M = (a+c) / abc
// ac | Q
ll b , c , N , M;
int T = 0;
FOREQ( a , 1 , Q ){
if( a * a > Q ){
break;
}
if( Q % a == 0 ){
c = Q / a;
b = ( ( ( ( a + c ) * Q ) / P ) / a ) / c;
if( ( a + c ) * Q == a * b * c * P ){
N = a * b;
M = b * c;
if( N > 0 && M > 0 ){
answer[T] = NM( N , M );
T++;
if( N != M ){
answer[T] = NM( M , N );
T++;
}
}
}
}
}
cout << T << "\n";
sort( answer , answer + T );
FOR( t , 0 , T ){
NM& NMt = answer[t];
cout << NMt.m_N << " " << NMt.m_M << "\n";
}
QUIT;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0