提出 #21588624


ソースコード 拡げる

#include <atcoder/all>
using namespace atcoder;
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const double pi = 3.14159265359;
const ll INF = 1LL << 60;

ll MOD = 1000000007;

ll solve_pos(int k, const vector<int>& ps, const vector<int>& ns)
{
  int np = ps.size();
  int nn = ns.size();

  ll r = 1;
  int i = 0, j = 0;
  
  while (k > 0){
    if (k >= 2 && np - i >= 2 && nn - j >= 2){
      ll xp = ll(ps[i]) * ll(ps[i+1]);
      ll xn = ll(ns[j]) * ll(ns[j+1]);
      if (xp > xn){
	r *= ps[i]; // ひとつだけ用いるのがミソ
	r %= MOD;
	i++;
	k--;
      } else {
	r *= xn % MOD; // ここの % MOD 必須
	r %= MOD;
	j += 2;
	k -= 2;
      }
    } else if (k >= 2 && nn - j >= 2) {
      r *= ll(ns[j]) * ll(ns[j+1]) % MOD; // ここの % MOD 必須
      r %= MOD;
      j += 2;
      k -= 2;
    } else if (np > i){
      r *= ps[i];
      r %= MOD;
      i++;
      k--;
    } else {
      r = -1;
      break;
    }
  }

  return r;
}

ll solve_neg(int k, const vector<int>& ps, const vector<int>& ns)
{
  vector<int> v(ps.size() + ns.size());
  for (int i = 0; i < ps.size(); i++){ v[i] = ps[i]; }
  for (int i = 0; i < ns.size(); i++){ v[ps.size() + i] = -ns[i]; }
  sort(v.begin(), v.end());
  
  ll r = -1 % MOD;
  for (int i = 0; i < k; i++){
    r *= v[i];
    r = (r%MOD + MOD) % MOD;
  }
  
  return r;
}

int main()
{
  int n, k;
  cin >> n >> k;

  vector<int> ps, ns;
  for (int i = 0; i < n; i++){
    int x;
    cin >> x;
    if (x >= 0) ps.push_back(x);
    else ns.push_back(x);
  }

  sort(ps.begin(), ps.end(), greater<int>());
  sort(ns.begin(), ns.end());

  ll ans_p = solve_pos(k, ps, ns);

  if (ans_p >= 0){
    cout << ans_p << endl;
    return 0;
  }

  ll ans_n = solve_neg(k, ps, ns);
  cout << ans_n << endl;
  return 0;
}

提出情報

提出日時
問題 E - Multiplication 4
ユーザ unnohideyuki
言語 C++ (GCC 9.2.1)
得点 500
コード長 1886 Byte
結果 AC
実行時間 105 ms
メモリ 4640 KiB

コンパイルエラー

./Main.cpp: In function ‘ll solve_neg(int, const std::vector<int>&, const std::vector<int>&)’:
./Main.cpp:56:21: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   56 |   for (int i = 0; i < ps.size(); i++){ v[i] = ps[i]; }
      |                   ~~^~~~~~~~~~~
./Main.cpp:57:21: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   57 |   for (int i = 0; i < ns.size(); i++){ v[ps.size() + i] = -ns[i]; }
      |                   ~~^~~~~~~~~~~

ジャッジ結果

セット名 Sample All after_contest
得点 / 配点 0 / 0 500 / 500 0 / 0
結果
AC × 4
AC × 39
AC × 1
セット名 テストケース
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
All hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, random_m01.txt, random_m02.txt, random_m03.txt, random_m04.txt, random_m05.txt, random_m06.txt, random_max01.txt, random_max02.txt, random_mz01.txt, random_mz02.txt, random_mz03.txt, random_p01.txt, random_p02.txt, random_pm00.txt, random_pm01.txt, random_pm02.txt, random_pm03.txt, random_pm11.txt, random_pm12.txt, random_pmz01.txt, random_pmz02.txt, random_pmz03.txt, random_pmz04.txt, random_pmz11.txt, random_pmz12.txt, random_pmz13.txt, random_pz01.txt, random_pz02.txt, random_pz03.txt, random_z01.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
after_contest after_contest_01.txt
ケース名 結果 実行時間 メモリ
after_contest_01.txt AC 78 ms 4160 KiB
hand_01.txt AC 79 ms 4268 KiB
hand_02.txt AC 82 ms 4336 KiB
hand_03.txt AC 79 ms 4116 KiB
hand_04.txt AC 82 ms 4224 KiB
hand_05.txt AC 80 ms 4212 KiB
random_m01.txt AC 37 ms 3764 KiB
random_m02.txt AC 17 ms 3740 KiB
random_m03.txt AC 48 ms 3852 KiB
random_m04.txt AC 78 ms 4336 KiB
random_m05.txt AC 68 ms 4260 KiB
random_m06.txt AC 22 ms 3688 KiB
random_max01.txt AC 105 ms 4640 KiB
random_max02.txt AC 86 ms 4336 KiB
random_mz01.txt AC 50 ms 3944 KiB
random_mz02.txt AC 14 ms 3576 KiB
random_mz03.txt AC 10 ms 3604 KiB
random_p01.txt AC 46 ms 3832 KiB
random_p02.txt AC 44 ms 3812 KiB
random_pm00.txt AC 23 ms 3684 KiB
random_pm01.txt AC 32 ms 3764 KiB
random_pm02.txt AC 59 ms 4196 KiB
random_pm03.txt AC 37 ms 3752 KiB
random_pm11.txt AC 49 ms 3724 KiB
random_pm12.txt AC 12 ms 3444 KiB
random_pmz01.txt AC 47 ms 3872 KiB
random_pmz02.txt AC 76 ms 4104 KiB
random_pmz03.txt AC 35 ms 3580 KiB
random_pmz04.txt AC 41 ms 3520 KiB
random_pmz11.txt AC 48 ms 3660 KiB
random_pmz12.txt AC 14 ms 3688 KiB
random_pmz13.txt AC 51 ms 3724 KiB
random_pz01.txt AC 35 ms 3652 KiB
random_pz02.txt AC 60 ms 4048 KiB
random_pz03.txt AC 33 ms 4044 KiB
random_z01.txt AC 39 ms 4108 KiB
sample_01.txt AC 2 ms 3628 KiB
sample_02.txt AC 2 ms 3448 KiB
sample_03.txt AC 2 ms 3620 KiB
sample_04.txt AC 2 ms 3500 KiB