結果
| 問題 |
No.2127 Mod, Sum, Sum, Mod
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2022-10-28 15:57:58 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,517 bytes |
| コンパイル時間 | 1,826 ms |
| コンパイル使用メモリ | 192,356 KB |
| 最終ジャッジ日時 | 2025-02-08 13:51:18 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 1 TLE * 1 |
| other | AC * 14 WA * 11 TLE * 2 |
ソースコード
// O( min( N , M ) )の愚直解チェック
#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 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 FOREQ( VAR , INITIAL , FINAL ) for( TYPE_OF( FINAL ) VAR = INITIAL ; VAR <= FINAL ; VAR ++ )
#define QUIT return 0
#define RETURN( ANSWER ) cout << ( ANSWER ) << "\n"; QUIT
int main()
{
UNTIE;
constexpr const ll bound = 1000000000;
CIN_ASSERT( N , 1 , bound );
CIN_ASSERT( M , 1 , bound );
// sum( ll i = 1 ; i <= N ; i++ ) sum( ll j = 1 ; j <= M ; j++ ){ i % j }
// = sum( ll j = 1 ; j <= M ; j++ ) sum( ll i = 1 ; i <= N ; i++ ){ i % j }
// = sum( ll j = 1 ; j <= M ; j++ ){ ( N / j ) * ( ( j - 1 ) * j ) / 2 + ( N % j ) * ( N % j + 1 ) / 2 }
// = sum( ll j = 1 ; j <= M ; j++ ){ ( N / j ) * ( ( j - 1 ) * j ) / 2 + ( N % j ) * ( N % j + 1 ) / 2 }
constexpr const ll P = 998244353;
ll answer0 = 0;
ll answer1 = 0;
if( M > N ){
M = N;
}
ll N_r;
ll j_sum = 0;
FOREQ( j , 1 , M ){
N_r = N % j;
j_sum = ( j_sum + j - 1 ) % P;
answer0 += ( ( N / j ) * j_sum ) % P;
answer1 += ( N_r * ( N_r + 1 ) ) % P;
}
answer1 = ( answer1 % P ) * ( ( P + 1 ) / 2 );
RETURN( ( answer0 + answer1 ) % P );
}