提出 #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 | ||||||
| 結果 |
|
|
|
| セット名 | テストケース |
|---|---|
| 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 |