提出 #73588987
ソースコード 拡げる
// #pragma GCC target("avx2")
// #pragma GCC optimize("O3")
// clang-format off
#include <bits/stdc++.h>
#ifdef ATCODER
#include <atcoder/all>
#include <ankerl/unordered_dense.h>
using namespace atcoder;
#endif
#ifdef ATCODER
template <typename K, typename V>
using hash_map = ankerl::unordered_dense::map<K, V>;
template <typename K>
using hash_set = ankerl::unordered_dense::set<K>;
#else
template <typename K, typename V>
using hash_map = std::unordered_map<K, V>;
template <typename K>
using hash_set = std::unordered_set<K>;
#endif
namespace cp_internal {
char char_buff[64];
};
/* namespace */
using namespace std;
/* type */
using ll = long long;
using ull = unsigned long long;
using vll = __int128_t;
using uvll = __uint128_t;
template <typename T>
concept RAR = ranges::random_access_range<T>;
template <ranges::range Range>
using rvt = ranges::range_value_t<Range>;
/* ios*/
struct fast_ios {
fast_ios() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout << fixed << setprecision(15);
}
} fast_ios;
#ifdef ATCODER
// modint出力
template <int m>
istream &operator>>(istream &is, static_modint<m> &x) {
ll val;
is >> val;
x = val;
return is;
}
// modint入力
template <int m>
ostream &operator<<(ostream &os, const static_modint<m> &x) {
os << x.val();
return os;
}
#endif
// pair出力
template <class T1, class T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &pr) {
os << pr.first << ' ' << pr.second;
return os;
}
// pair入力
template <class T1, class T2>
istream &operator>>(istream &is, pair<T1, T2> &pr) {
is >> pr.first >> pr.second;
return is;
}
// tuple出力
template <class Tuple, size_t... I>
void print_tuple_impl(ostream &os, const Tuple &t, index_sequence<I...>) {
((os << (I == 0 ? "" : " ") << get<I>(t)), ...);
}
template <class... Ts>
ostream &operator<<(ostream &os, const tuple<Ts...> &t) {
print_tuple_impl(os, t, index_sequence_for<Ts...>{});
return os;
}
// tuple入力
template <class Tuple, size_t... I>
void read_tuple_impl(istream &is, Tuple &t, index_sequence<I...>) {
((is >> get<I>(t)), ...);
}
template <class... Ts>
istream &operator>>(istream &is, tuple<Ts...> &t) {
read_tuple_impl(is, t, index_sequence_for<Ts...>{});
return is;
}
// 128bit整数型出力
template <typename T>
typename enable_if<is_same<T, __int128>::value || is_same<T, __uint128_t>::value, ostream &>::type operator<<(ostream &os, T x) {
if (x == 0) return os << '0';
string s;
if constexpr (is_signed<T>::value) { // 符号付き
bool neg = x < 0;
if (neg) x = -x;
while (x > 0) {
s += '0' + x % 10;
x /= 10;
}
if (neg) s += '-';
} else { // 符号なし
while (x > 0) {
s += '0' + x % 10;
x /= 10;
}
}
ranges::reverse(s);
os << s;
return os;
}
// 128bit整数型入力
template <typename T>
typename enable_if<is_same<T, __int128>::value || is_same<T, __uint128_t>::value, istream &>::type operator>>(istream &is, T &x) {
string s;
is >> s;
x = 0;
size_t i = 0;
if constexpr (is_signed<T>::value) {
bool neg = false;
if (s[0] == '-') {
neg = true;
i = 1;
}
for (; i < s.size(); i++) x = x * 10 + (s[i] - '0');
if (neg) x = -x;
} else {
for (; i < s.size(); i++) x = x * 10 + (s[i] - '0');
}
return is;
}
// コンテナ入力
template <class T, template <class...> class Container>
istream &operator>>(istream &is, Container<T> &v)
requires requires(Container<T> c) {
c.begin();
c.end();
c.push_back(T{});
} && (!is_same_v<Container<T>, string>)
{
for (auto &x : v) is >> x;
return is;
}
// コンテナ出力
template <class T>
concept Iterable = requires(T a) {
begin(a);
end(a);
} && !is_same_v<T, string>;
template <Iterable T>
void print(const T &v) {
bool first = true;
for (auto const &x : v) {
if (!first) cout << " ";
first = false;
cout << x;
}
cout << '\n';
}
template <class... T>
void input(T &...a) {
(cin >> ... >> a);
}
template <class T, class... Ts>
void print(const T &a, const Ts &...b) {
((cout << a), ..., (cout << ' ' << b));
cout << '\n';
}
template <class T>
concept RandomAccessContainer = requires(T a) {
typename T::value_type;
{ a.begin() } -> random_access_iterator;
{ a.end() } -> random_access_iterator;
};
template <RandomAccessContainer C>
void print_range(const C &v, int l, int r, string sep = " ") {
int n = v.size();
l = max(0, l);
r = min(n, r);
if (l >= r) {
cout << '\n';
return;
}
cout << v[l];
for (int i = l + 1; i < r; i++) {
cout << sep << v[i];
}
cout << '\n';
}
/* debug */
#ifdef LOCAL
template <Iterable T>
void debug_impl(const T &v) {
bool first = true;
for (auto const &x : v) {
if (!first) cerr << " ";
first = false;
cerr << x;
}
cerr << '\n';
}
template <class T, class... Ts>
void debug_impl(const T &a, const Ts &...b) {
((cerr << a), ..., (cerr << ' ' << b));
cerr << '\n';
}
#define debug(...) do { cerr << "\033[33m[" << #__VA_ARGS__ << "]\033[0m "; debug_impl(__VA_ARGS__); } while(0)
#else
#define debug(...)
#endif
/* math*/
ll powll(ll x, ll n) {
ll ret = 1;
while (n) {
if (n & 1) ret = x * ret;
x *= x;
n >>= 1;
}
return ret;
}
template <class T>
T divceil(T x, T y) {
auto d = x / y, r = x % y;
return d + (r != 0 && ((r ^ y) > 0));
}
template <class T>
T divfloor(T x, T y) {
auto d = x / y, r = x % y;
return d - (r != 0 && ((r ^ y) < 0));
}
template <class T1, class T2>
T1 smod(T1 x, T2 m) {
if (x < 0) return (x % m + m) % m;
return x % m;
}
ll pow_mod32(ll x, ll n, int m) {
if (m == 1) return 0;
ll ret = 1;
x = smod(x, m);
while (n) {
if (n & 1) ret = smod(x * ret, m);
x = smod(x * x, m);
n >>= 1;
}
return ret;
}
ll pow_mod64(vll x, vll n, ll m) {
if (m == 1) return 0;
vll ret = 1;
x = smod(x, m);
while (n) {
if (n & 1) ret = smod(x * ret, m);
x = smod(x * x, m);
n >>= 1;
}
return ret;
}
// m以下の最大の整数xで x ≡ q (mod p) を満たすものを返す
ll nearest_px_plus_q_le(ll m, ll p, ll q) {
return m - smod(m - q, p);
}
// m以上の最小の整数xで x ≡ q (mod p) を満たすものを返す
ll nearest_px_plus_q_ge(ll m, ll p, ll q) {
return m + (p - smod(m - q, p)) % p;
}
// 2点(x1, y1), (x2, y2)を通る直線の方程式ax+by+c=0を求める
tuple<ll, ll, ll> line_from_two_points(ll x1, ll y1, ll x2, ll y2) {
ll a = y1 - y2;
ll b = x2 - x1;
ll c = x1 * y2 - y1 * x2;
ll g = gcd(gcd(a, b), c);
a /= g;
b /= g;
c /= g;
if (a < 0 || (a == 0 && b < 0)) {
a *= -1;
b *= -1;
c *= -1;
}
return {a, b, c};
}
// 3点(x1, y1), (x2, y2), (x3, y3)が同一直線状にあるか判定する
bool collinear(ll x1, ll y1, ll x2, ll y2, ll x3, ll y3) {
vll cross = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1);
return cross == 0;
}
/* algorithms */
template <RAR Range>
ll lower_count(const Range &r, const rvt<Range> &x) {
return ranges::distance(ranges::begin(r), ranges::lower_bound(r, x));
}
template <RAR Range>
ll upper_count(const Range &r, const rvt<Range> &x) {
return ranges::distance(ranges::begin(r), ranges::upper_bound(r, x));
}
template <class A, class B>
requires requires(A &a, const B &b) {
{ a > b } -> std::convertible_to<bool>;
{ a = b };
}
bool chmin(A &a, const B &b) {
if (a > b) {
a = b;
return true;
}
return false;
}
template <class A, class B>
requires requires(A &a, const B &b) {
{ a < b } -> std::convertible_to<bool>;
{ a = b };
}
bool chmax(A &a, const B &b) {
if (a < b) {
a = b;
return true;
}
return false;
}
template <RAR Range>
hash_map<rvt<Range>, ll> compression(Range r) {
ranges::sort(r);
auto res = ranges::unique(r);
r.erase(ranges::begin(res), ranges::end(res));
hash_map<rvt<Range>, ll> ret;
for (ll i = 0; auto v : r) {
ret[v] = i++;
}
return ret;
}
template <ranges::range Range>
vector<rvt<Range>> accumulate_sum(const Range &r) {
vector<rvt<Range>> res(ssize(r));
partial_sum(ranges::begin(r), ranges::end(r), ranges::begin(res));
return res;
}
template <ranges::range Range>
vector<rvt<Range>> accumulate_sum(const Range &r, const rvt<Range> &init) {
vector<rvt<Range>> res(ssize(r) + 1);
res[0] = init;
inclusive_scan(ranges::begin(r), ranges::end(r), ranges::begin(res) + 1, plus<>(), init);
return res;
}
template <ranges::range Range>
vector<vector<rvt<Range>>> lpartition(const Range &r, int w) {
int n = ssize(r);
int h = (n + w - 1) / w;
vector<vector<rvt<Range>>> ret(h, vector<rvt<Range>>(w));
for (int i = 0; i < n; ++i) {
ret[i / w][i % w] = r[i];
}
return ret;
}
/**
* @brief Run-Length Encoding(RLE)を行う関数
* @tparam Range ランダムアクセス可能な Range(vector, string, array など)
* @param R 入力 Range
* @return vector<pair<rvt<Range>, long long>>
* (値, 連続出現回数) を格納したベクタを返す。
* @details
* 隣接する同値要素をまとめて (値, 個数) の形で列挙する。
* 例: [a, a, b, b, b, c] → {(a,2), (b,3), (c,1)}
*/
template <RAR Range>
auto runlength(const Range &R) {
vector<pair<rvt<Range>, ll>> ret;
for (ll l = 0; l < ssize(R);) {
ll r = l + 1;
for (; r < ssize(R) && R[l] == R[r]; ++r) {
}
ret.emplace_back(R[l], r - l);
l = r;
}
return ret;
}
template <RAR Range>
void remove_duplicates(Range &v) {
ranges::sort(v);
auto res = ranges::unique(v);
v.erase(ranges::begin(res), ranges::end(res));
}
template <ranges::range Range>
auto sum_of(const Range &R) {
return reduce(ranges::begin(R), ranges::end(R));
}
template <ranges::range Range, class T>
T sum_of(const Range &R) {
return reduce(ranges::begin(R), ranges::end(R), T());
}
/* data_structure */
template <class T>
using priority_queue_min = priority_queue<T, vector<T>, greater<T>>;
template <class T>
using priority_queue_max = priority_queue<T, vector<T>>;
template <class T>
auto make_vec(size_t n, const T &val) {
return vector<T>(n, val);
}
template <class T, class... Args>
auto make_vec(size_t n, Args... args) {
return vector<decltype(make_vec<T>(args...))>(n, make_vec<T>(args...));
}
/* string */
string dec_to_base(ull x, int base) {
auto b = begin(cp_internal::char_buff);
auto [ptr, ec] = to_chars(b, end(cp_internal::char_buff), x, base);
return string(b, ptr);
}
ull base_to_dec(const string &x, int base) { return stoull(x, 0, base); }
void zfill(string &s, size_t width) { s = string(width > s.size() ? width - s.size() : 0, '0') + s; }
/* grid */
[[maybe_unused]] constexpr int dx[] = {0, 1, 0, -1};
[[maybe_unused]] constexpr int dy[] = {1, 0, -1, 0};
bool grid_check(ll row, ll col, ll h, ll w) { return 0 <= row && row < h && 0 <= col && col < w; }
/* bit */
int popcnt(ull x) { return popcount(x); }
int msb(ull x) { return 63 - countl_zero(x); }
int lsb(ull x) { return countr_zero(x); }
/* random */
struct Xorshift128 {
uint x = 123456789;
uint y = 362436069;
uint z = 521288629;
uint w;
Xorshift128() {
random_device rd;
w = rd();
if (w == 0) w = 88675123;
}
// 32bit乱数を1つ生成 (RNG1回呼び出し)
uint operator()() {
uint t = x ^ (x << 11);
x = y;
y = z;
z = w;
return w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
}
// 64bit乱数を1つ生成 (RNG2回呼び出し)
ull rand64() {
ull high = ull((*this)()) << 32;
ull low = ull((*this)());
return high | low;
}
// 完全一様な [l, r] の32bit整数乱数 (RNG1回呼び出し)
// modulo biasを除去するためのrejection sampling
uint rand_range(uint l, uint r) {
uint range = r - l + 1;
// 2^32 を超えない最大の「range の倍数」
uint limit = ~uint(0) - (~uint(0) % range);
while (true) {
uint x = (*this)();
if (x <= limit) {
return l + (x % range);
}
}
}
// 完全一様な [l, r] の64bit整数乱数 (RNG2回呼び出し)
ull rand_range64(ull l, ull r) {
ull range = r - l + 1;
ull limit = ~ull(0) - (~ull(0) % range);
while (true) {
ull x = rand64();
if (x <= limit) {
return l + (x % range);
}
}
};
};
/* util */
#define OL_REP(_1, _2, _3, _4, name, ...) name
#define REP2(i, n) for (ll i = 0; i < ll(n); ++(i))
#define REP3(i, a, b) for (ll i = ll(a); i < ll(b); ++(i))
#define REP4(i, a, b, c) for (ll i = ll(a); i < ll(b); i += c)
#define rep(...) OL_REP(__VA_ARGS__, REP4, REP3, REP2)(__VA_ARGS__)
#define RREP2(i, n) for (ll i = ll(n); i >= 0; --i)
#define RREP3(i, a, b) for (ll i = ll(a); i > ll(b); --(i))
#define RREP4(i, a, b, c) for (ll i = ll(a); i > ll(b); i -= c)
#define rrep(...) OL_REP(__VA_ARGS__, RREP4, RREP3, RREP2)(__VA_ARGS__)
/* constants */
//[[maybe_unused]] constexpr ll MOD = 1e9 + 7;
[[maybe_unused]] constexpr ll MOD = 998244353;
[[maybe_unused]] constexpr int INF32 = (1 << 30) - 1;
[[maybe_unused]] constexpr ll INF64 = (1LL << 62) - 1;
[[maybe_unused]] const double PI = numbers::pi;
// clang-format on
int main() {
ll N, K, M;
input(N, K, M);
vector<ll> A, B;
rep(i, N) {
ll h, p;
input(h, p);
if (h == 1) {
A.emplace_back(p);
} else {
B.emplace_back(p);
}
}
ranges::sort(A, ranges::greater());
ranges::sort(B, ranges::greater());
if (!(M <= ssize(A) && K - M <= ssize(B))) {
print(-1);
} else {
ll ans = 0;
rep(i, M) { ans += A[i]; }
rep(i, K - M) { ans += B[i]; }
print(ans);
}
}
提出情報
| 提出日時 |
|
| 問題 |
C - チーム編成 |
| ユーザ |
unidayo |
| 言語 |
C++23 (GCC 15.2.0) |
| 得点 |
300 |
| コード長 |
14824 Byte |
| 結果 |
AC |
| 実行時間 |
25 ms |
| メモリ |
6000 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
300 / 300 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample01.txt, sample02.txt, sample03.txt |
| All |
sample01.txt, sample02.txt, sample03.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in40.txt, in41.txt, in42.txt, in43.txt, in44.txt, in45.txt, in46.txt, in47.txt, in48.txt, in49.txt, in50.txt, in51.txt, in52.txt, in53.txt, in54.txt, in55.txt, in56.txt, in57.txt, in58.txt, in59.txt, in60.txt, in61.txt, in62.txt, in63.txt, in64.txt, in65.txt, in66.txt, in67.txt, in68.txt, in69.txt, in70.txt, in71.txt, in72.txt, in73.txt, in74.txt, in75.txt, in76.txt, in77.txt, in78.txt, in79.txt, in80.txt, in81.txt, in82.txt, in83.txt, in84.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| in01.txt |
AC |
1 ms |
3436 KiB |
| in02.txt |
AC |
1 ms |
3580 KiB |
| in03.txt |
AC |
1 ms |
3580 KiB |
| in04.txt |
AC |
1 ms |
3540 KiB |
| in05.txt |
AC |
1 ms |
3388 KiB |
| in06.txt |
AC |
1 ms |
3592 KiB |
| in07.txt |
AC |
1 ms |
3592 KiB |
| in08.txt |
AC |
1 ms |
3548 KiB |
| in09.txt |
AC |
25 ms |
5060 KiB |
| in10.txt |
AC |
1 ms |
3468 KiB |
| in11.txt |
AC |
25 ms |
6000 KiB |
| in12.txt |
AC |
25 ms |
5404 KiB |
| in13.txt |
AC |
25 ms |
4912 KiB |
| in14.txt |
AC |
25 ms |
5192 KiB |
| in15.txt |
AC |
25 ms |
5192 KiB |
| in16.txt |
AC |
14 ms |
5720 KiB |
| in17.txt |
AC |
1 ms |
3436 KiB |
| in18.txt |
AC |
1 ms |
3580 KiB |
| in19.txt |
AC |
25 ms |
5048 KiB |
| in20.txt |
AC |
25 ms |
4860 KiB |
| in21.txt |
AC |
25 ms |
5148 KiB |
| in22.txt |
AC |
16 ms |
5160 KiB |
| in23.txt |
AC |
15 ms |
5032 KiB |
| in24.txt |
AC |
13 ms |
5116 KiB |
| in25.txt |
AC |
13 ms |
5176 KiB |
| in26.txt |
AC |
16 ms |
5104 KiB |
| in27.txt |
AC |
25 ms |
5188 KiB |
| in28.txt |
AC |
25 ms |
5452 KiB |
| in29.txt |
AC |
24 ms |
5416 KiB |
| in30.txt |
AC |
18 ms |
5468 KiB |
| in31.txt |
AC |
1 ms |
3444 KiB |
| in32.txt |
AC |
1 ms |
3592 KiB |
| in33.txt |
AC |
1 ms |
3400 KiB |
| in34.txt |
AC |
1 ms |
3468 KiB |
| in35.txt |
AC |
1 ms |
3468 KiB |
| in36.txt |
AC |
1 ms |
3540 KiB |
| in37.txt |
AC |
1 ms |
3444 KiB |
| in38.txt |
AC |
1 ms |
3548 KiB |
| in39.txt |
AC |
1 ms |
3436 KiB |
| in40.txt |
AC |
1 ms |
3512 KiB |
| in41.txt |
AC |
1 ms |
3580 KiB |
| in42.txt |
AC |
1 ms |
3540 KiB |
| in43.txt |
AC |
1 ms |
3592 KiB |
| in44.txt |
AC |
1 ms |
3580 KiB |
| in45.txt |
AC |
1 ms |
3468 KiB |
| in46.txt |
AC |
1 ms |
3548 KiB |
| in47.txt |
AC |
16 ms |
5560 KiB |
| in48.txt |
AC |
9 ms |
4436 KiB |
| in49.txt |
AC |
24 ms |
5844 KiB |
| in50.txt |
AC |
24 ms |
5996 KiB |
| in51.txt |
AC |
24 ms |
5664 KiB |
| in52.txt |
AC |
18 ms |
5240 KiB |
| in53.txt |
AC |
24 ms |
5556 KiB |
| in54.txt |
AC |
24 ms |
5612 KiB |
| in55.txt |
AC |
24 ms |
5000 KiB |
| in56.txt |
AC |
18 ms |
4752 KiB |
| in57.txt |
AC |
24 ms |
5540 KiB |
| in58.txt |
AC |
24 ms |
5544 KiB |
| in59.txt |
AC |
24 ms |
5480 KiB |
| in60.txt |
AC |
23 ms |
5580 KiB |
| in61.txt |
AC |
1 ms |
3388 KiB |
| in62.txt |
AC |
1 ms |
3444 KiB |
| in63.txt |
AC |
25 ms |
5060 KiB |
| in64.txt |
AC |
25 ms |
5184 KiB |
| in65.txt |
AC |
24 ms |
5544 KiB |
| in66.txt |
AC |
24 ms |
5548 KiB |
| in67.txt |
AC |
1 ms |
3468 KiB |
| in68.txt |
AC |
1 ms |
3608 KiB |
| in69.txt |
AC |
1 ms |
3540 KiB |
| in70.txt |
AC |
1 ms |
3580 KiB |
| in71.txt |
AC |
1 ms |
3592 KiB |
| in72.txt |
AC |
1 ms |
3580 KiB |
| in73.txt |
AC |
1 ms |
3540 KiB |
| in74.txt |
AC |
1 ms |
3592 KiB |
| in75.txt |
AC |
1 ms |
3580 KiB |
| in76.txt |
AC |
1 ms |
3548 KiB |
| in77.txt |
AC |
1 ms |
3592 KiB |
| in78.txt |
AC |
1 ms |
3540 KiB |
| in79.txt |
AC |
1 ms |
3580 KiB |
| in80.txt |
AC |
15 ms |
5728 KiB |
| in81.txt |
AC |
14 ms |
5552 KiB |
| in82.txt |
AC |
1 ms |
3580 KiB |
| in83.txt |
AC |
1 ms |
3576 KiB |
| in84.txt |
AC |
24 ms |
5420 KiB |
| sample01.txt |
AC |
1 ms |
3580 KiB |
| sample02.txt |
AC |
1 ms |
3436 KiB |
| sample03.txt |
AC |
1 ms |
3544 KiB |