Submission #21365226
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
using uint = unsigned int;
using ll = long long;
using ull = unsigned long long;
using pii = pair<int,int>;
using pll = pair<long, long>;
template <class T> using V = vector<T>;
template <class T> using VV = V<V<T>>;
#define rep(i, n) for(ll i = 0; i<n; i++)
#define rep_s(i, start, n) for(ll i= start; i<n; i++)
#define rep_down(i, n) for(ll i = n-1; i>=0; i--)
#define rep_down_s(i, n, start) for(ll i = n-1; i>=start; i--)
#define ALL(a) (a).begin(), (a).end()
#define ALL_str(a) (a).cbegin(), (a).cend()
//int count = 0; // 組合せの総数
ll ans = 614889782588491412;
ll array_prime[15] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47};
ll x[60];
// 実際に組合せを生成する
// comb: 生成された組合せ配列
// step: n桁目までが生成されていることを示す。
// init: その桁始まりの数を示す。
void makeCombination(vector<ll> comb, int n, int r, int step, int init, ll N_){
// r桁すべてが生成された
if(step == r){
ll tmp = 1, tmp2;
for (int j = 0; j < r; ++j){
tmp2 = array_prime[comb[j]];
tmp *= tmp2;
//cout << "comb[j]: " << comb[j] << endl;
}
//cout << tmp << endl;
rep(k, N_)
{
if (gcd(x[k], tmp) == 1)
break;
if (k == N_ - 1)
ans = min(ans, tmp);
}
//cout << ans << endl;
//cout << endl;
//count++;
return;
}
// 全桁生成されていない
for (int i = init; i <= n-r+step; ++i){
comb.push_back(i);
makeCombination(comb, n, r, step+1, i+1, N_);
// ここで配列から一つ排除しないと困ったことになる
comb.pop_back();
}
}
// makeCombinationに値を渡すためだけの関数
// n個の中からr個選択する
void combination(int n, int r, ll N_){
vector<ll> comb;
makeCombination(comb, n, r, 0, 0, N_);
}
/*
60
1 2 3 4 5 6 10 12 15 20 30 60
odd: 4
even: 8
36
1 2 3 4 6 9 12 18 36
odd: 3
even: 6
4 * 3 * 3 * 3
420
*/
int main(void) {
/*
ll N;
cin >> N;
ll a[N];
rep(i, N) cin >> a[i];
if (N == 1)
{
cout << a[0] * a[0] % 998244353 << endl;
return 0;
}
ll sum = 0;
rep(i, N)
{
sum += a[i] % 998244353;
sum %= 998244353;
}
ll n_2 = 1;
rep(i, N)
{
n_2 *= 2;
n_2 %= 998244353;
cout << n_2 << endl;
}
cout << n_2 << endl;
n_2--;
cout << sum << " " << n_2 << endl;
ll ans = n_2 * sum;
ans %= 998244353;
cout << ans << endl;
*/
ll N;
cin >> N;
vector<ll> a(N);
rep(i, N) cin >> a[i];
ll ans = 0;
sort(ALL(a));
reverse(ALL(a));
/*
if (N == 1)
{
cout << a[0] * a[0] % 998244353 << endl;
return 0;
}
*/
//ll sum[N];
//sum[0] = a[0];
//rep(i, N - 1) sum[i + 1] += sum[i] + a[i + 1];
ll sum = a[0];
//cout << sum << " " << sum * a[0] << endl;
ans = sum * a[0] % 998244353;
//cout << ans << endl;
rep(i, N - 1)
{
sum += 998244353;
sum = sum * 2 + (a[i + 1] - a[i]);
sum %= 998244353;
/*
if (i == N - 2) sum %= 998244353;
else
{
if (a[i + 1] - a[ i + 2] < (sum % 998244353) * 2) sum %= 998244353;
}
*/
ans += (sum * a[i + 1]) % 998244353;
ans %= 998244353;
//cout << ans << " " << sum << " " << sum * a[i] << endl;
}
//ll dfa = 1996488706 * 998244353;
//cout << dfa << endl;
cout << ans << endl;
return 0;
}
Submission Info
| Submission Time |
|
| Task |
B - Products of Min-Max |
| User |
Daisi96 |
| Language |
C++ (GCC 9.2.1) |
| Score |
400 |
| Code Size |
3658 Byte |
| Status |
AC |
| Exec Time |
78 ms |
| Memory |
4796 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
400 / 400 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00-Sample-00, 00-Sample-01, 00-Sample-02 |
| All |
00-Sample-00, 00-Sample-01, 00-Sample-02, 01-Handmade-00, 01-Handmade-01, 01-Handmade-02, 01-Handmade-03, 01-Handmade-04, 01-Handmade-05, 02-Small-00, 02-Small-01, 02-Small-02, 02-Small-03, 02-Small-04, 02-Small-05, 02-Small-06, 02-Small-07, 02-Small-08, 02-Small-09, 02-Small-10, 02-Small-11, 02-Small-12, 02-Small-13, 02-Small-14, 02-Small-15, 02-Small-16, 02-Small-17, 02-Small-18, 02-Small-19, 03-Large-00, 03-Large-01, 03-Large-02, 03-Large-03, 03-Large-04, 03-Large-05, 03-Large-06, 03-Large-07, 03-Large-08, 03-Large-09, 03-Large-10, 03-Large-11, 03-Large-12, 03-Large-13, 03-Large-14, 03-Large-15, 03-Large-16, 03-Large-17, 03-Large-18, 03-Large-19 |
| Case Name |
Status |
Exec Time |
Memory |
| 00-Sample-00 |
AC |
5 ms |
3460 KiB |
| 00-Sample-01 |
AC |
1 ms |
3464 KiB |
| 00-Sample-02 |
AC |
2 ms |
3576 KiB |
| 01-Handmade-00 |
AC |
43 ms |
4612 KiB |
| 01-Handmade-01 |
AC |
69 ms |
4732 KiB |
| 01-Handmade-02 |
AC |
74 ms |
4636 KiB |
| 01-Handmade-03 |
AC |
71 ms |
4796 KiB |
| 01-Handmade-04 |
AC |
74 ms |
4740 KiB |
| 01-Handmade-05 |
AC |
70 ms |
4592 KiB |
| 02-Small-00 |
AC |
3 ms |
3448 KiB |
| 02-Small-01 |
AC |
2 ms |
3436 KiB |
| 02-Small-02 |
AC |
3 ms |
3576 KiB |
| 02-Small-03 |
AC |
2 ms |
3508 KiB |
| 02-Small-04 |
AC |
2 ms |
3408 KiB |
| 02-Small-05 |
AC |
2 ms |
3508 KiB |
| 02-Small-06 |
AC |
2 ms |
3548 KiB |
| 02-Small-07 |
AC |
2 ms |
3508 KiB |
| 02-Small-08 |
AC |
2 ms |
3580 KiB |
| 02-Small-09 |
AC |
2 ms |
3408 KiB |
| 02-Small-10 |
AC |
3 ms |
3436 KiB |
| 02-Small-11 |
AC |
2 ms |
3412 KiB |
| 02-Small-12 |
AC |
2 ms |
3464 KiB |
| 02-Small-13 |
AC |
2 ms |
3384 KiB |
| 02-Small-14 |
AC |
2 ms |
3508 KiB |
| 02-Small-15 |
AC |
2 ms |
3544 KiB |
| 02-Small-16 |
AC |
2 ms |
3544 KiB |
| 02-Small-17 |
AC |
4 ms |
3436 KiB |
| 02-Small-18 |
AC |
2 ms |
3508 KiB |
| 02-Small-19 |
AC |
2 ms |
3464 KiB |
| 03-Large-00 |
AC |
36 ms |
3604 KiB |
| 03-Large-01 |
AC |
32 ms |
3436 KiB |
| 03-Large-02 |
AC |
58 ms |
4176 KiB |
| 03-Large-03 |
AC |
27 ms |
3540 KiB |
| 03-Large-04 |
AC |
35 ms |
3656 KiB |
| 03-Large-05 |
AC |
26 ms |
3388 KiB |
| 03-Large-06 |
AC |
78 ms |
4700 KiB |
| 03-Large-07 |
AC |
78 ms |
4680 KiB |
| 03-Large-08 |
AC |
9 ms |
3480 KiB |
| 03-Large-09 |
AC |
70 ms |
4368 KiB |
| 03-Large-10 |
AC |
77 ms |
4796 KiB |
| 03-Large-11 |
AC |
66 ms |
4348 KiB |
| 03-Large-12 |
AC |
78 ms |
4704 KiB |
| 03-Large-13 |
AC |
73 ms |
4436 KiB |
| 03-Large-14 |
AC |
58 ms |
4132 KiB |
| 03-Large-15 |
AC |
69 ms |
4400 KiB |
| 03-Large-16 |
AC |
62 ms |
4268 KiB |
| 03-Large-17 |
AC |
20 ms |
3504 KiB |
| 03-Large-18 |
AC |
18 ms |
3540 KiB |
| 03-Large-19 |
AC |
16 ms |
3392 KiB |