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
AC × 3
AC × 49
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