結果
問題 | No.2623 Room Allocation |
ユーザー |
![]() |
提出日時 | 2024-02-14 16:25:14 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 30 ms / 2,000 ms |
コード長 | 5,329 bytes |
コンパイル時間 | 3,179 ms |
コンパイル使用メモリ | 262,440 KB |
実行使用メモリ | 12,772 KB |
最終ジャッジ日時 | 2024-09-28 18:55:43 |
合計ジャッジ時間 | 4,865 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
#include <bits/stdc++.h>using namespace std;/*** @brief Scanner(高速入力)*/struct Scanner {public:explicit Scanner(FILE *fp) : fp(fp) {}template <typename T, typename... E>void read(T &t, E &...e) {read_single(t);read(e...);}private:static constexpr size_t line_size = 1 << 16;static constexpr size_t int_digits = 20;char line[line_size + 1] = {};FILE *fp = nullptr;char *st = line;char *ed = line;void read() {}static inline bool is_space(char c) { return c <= ' '; }void reread() {ptrdiff_t len = ed - st;memmove(line, st, len);char *tmp = line + len;ed = tmp + fread(tmp, 1, line_size - len, fp);*ed = 0;st = line;}void skip_space() {while (true) {if (st == ed) reread();while (*st && is_space(*st)) ++st;if (st != ed) return;}}template <typename T, enable_if_t<is_integral<T>::value, int> = 0>void read_single(T &s) {skip_space();if (st + int_digits >= ed) reread();bool neg = false;if (is_signed<T>::value && *st == '-') {neg = true;++st;}typename make_unsigned<T>::type y = *st++ - '0';while (*st >= '0') {y = 10 * y + *st++ - '0';}s = (neg ? -y : y);}template <typename T, enable_if_t<is_same<T, string>::value, int> = 0>void read_single(T &s) {s = "";skip_space();while (true) {char *base = st;while (*st && !is_space(*st)) ++st;s += string(base, st);if (st != ed) return;reread();}}template <typename T>void read_single(vector<T> &s) {for (auto &d : s) read(d);}};/*** @brief Printer(高速出力)*/struct Printer {public:explicit Printer(FILE *fp) : fp(fp) {}~Printer() { flush(); }template <bool f = false, typename T, typename... E>void write(const T &t, const E &...e) {if (f) write_single(' ');write_single(t);write<true>(e...);}template <typename... T>void writeln(const T &...t) {write(t...);write_single('\n');}void flush() {fwrite(line, 1, st - line, fp);st = line;}private:FILE *fp = nullptr;static constexpr size_t line_size = 1 << 16;static constexpr size_t int_digits = 20;char line[line_size + 1] = {};char *st = line;template <bool f = false>void write() {}void write_single(const char &t) {if (st + 1 >= line + line_size) flush();*st++ = t;}template <typename T, enable_if_t<is_integral<T>::value, int> = 0>void write_single(T s) {if (st + int_digits >= line + line_size) flush();st += to_chars(st, st + int_digits, s).ptr - st;}void write_single(const string &s) {for (auto &c : s) write_single(c);}void write_single(const char *s) {while (*s != 0) write_single(*s++);}template <typename T>void write_single(const vector<T> &s) {for (size_t i = 0; i < s.size(); i++) {if (i) write_single(' ');write_single(s[i]);}}};Scanner scanner = Scanner(stdin);Printer printer = Printer(stdout);void flush() { printer.flush(); }void print() { printer.write('\n'); }template <class Head, class... Tail>void print(Head &&head, Tail &&...tail) {printer.write(head);if (sizeof...(Tail)) printer.write(' ');print(forward<Tail>(tail)...);}void read() {}template <class Head, class... Tail>void read(Head &head, Tail &...tail) {scanner.read(head);read(tail...);}#define INT(...) \int __VA_ARGS__; \read(__VA_ARGS__)#define LL(...) \long long __VA_ARGS__; \read(__VA_ARGS__)#define STR(...) \string __VA_ARGS__; \read(__VA_ARGS__)#define CHAR(...) \char __VA_ARGS__; \read(__VA_ARGS__)#define DBL(...) \double __VA_ARGS__; \read(__VA_ARGS__)#define VEC(type, name, size) \vector<type> name(size); \read(name)#define VV(type, name, h, w) \vector<vector<type>> name(h, vector<type>(w)); \read(name)#ifdef LOCAL#include <debug.h>#else#define debug(...) 42#endif // LOCALstruct ChronoTimer {std::chrono::high_resolution_clock::time_point st;ChronoTimer() { reset(); }void reset() { st = std::chrono::high_resolution_clock::now(); }std::chrono::milliseconds::rep elapsed() {auto ed = std::chrono::high_resolution_clock::now();return std::chrono::duration_cast<std::chrono::milliseconds>(ed - st).count();}};int main(int, char **) {#ifdef LOCALChronoTimer chrono;freopen("/home/user/acm/competitve/src/input.txt", "r", stdin);freopen("/home/user/acm/competitve/src/output.txt", "w", stdout);#endifstd::cout << fixed << setprecision(12);INT(N, X, Y);int M = X + Y;using i64 = int64_t;vector<i64> p(M);std::vector<i64> a(M), b(M);for (auto i : views::iota(0, N)) {INT(P);STR(C);debug(P, C);p[i % M] += P * (C == "B" ? -1 : 1);a[i % M] += P * (C == "B" ? 0 : 1);b[i % M] += P * (C == "B" ? 1 : 0);}debug(b);std::ranges::sort(p, greater<>());debug(p);i64 ans = std::accumulate(p.begin(), p.begin() + X, 0LL);debug(ans);ans += std::accumulate(b.begin(), b.end(), 0LL);debug(ans);print(ans);#ifdef LOCALprint("\nRunning Time:", chrono.elapsed(), "ms");#endif}