結果

問題 No.2453 Seat Allocation
ユーザー Focus_Sash
提出日時 2023-09-01 22:41:19
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
RE  
実行時間 -
コード長 5,363 bytes
コンパイル時間 1,999 ms
コンパイル使用メモリ 205,000 KB
最終ジャッジ日時 2025-02-16 17:02:07
ジャッジサーバーID
(参考情報)
judge3 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 21 RE * 1
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include "bits/stdc++.h"
using namespace std;
// #define ONLINE_JUDGE
#define rep(i, n) for (ll(i) = 0; (i) < (n); ++(i))
#define reps(i, k, n) for (ll(i) = (k); (i) < (n); ++(i))
#define repsi(i, k, n) for (ll(i) = (k); (i) <= (n); ++(i))
#define dreps(i, k, n) for (ll(i) = (k); (i) >= (n); --(i))
namespace util {
using ll = long long;
using vl = std::vector<long long>;
using pl = std::pair<long long, long long>;
constexpr long long kInf = std::numeric_limits<long long>::max() / 8;
constexpr long long kMax = std::numeric_limits<long long>::max();
template <typename T, typename U>
inline bool UpdateMax(T &x, const U &y) {
if (x < y) {
x = y;
return true;
}
return false;
}
template <typename T, typename U>
inline bool UpdateMin(T &x, const U &y) {
if (x > y) {
x = y;
return true;
}
return false;
}
// verified
inline long long Pow(long long x, long long n) {
assert(n >= 0);
if (x == 0) return 0;
long long res = 1LL;
while (n > 0) {
if (n & 1) {
assert(x != 0 && std::abs(res) <= kMax / std::abs(x));
res = res * x;
}
if (n >>= 1) {
assert(x != 0 && std::abs(x) <= kMax / std::abs(x));
x = x * x;
}
}
return res;
}
// verified
inline long long Mod(long long n, const long long m) {
// returns the "arithmetic modulo"
// for a pair of integers (n, m) with m != 0, there exists a unique pair of
// integer (q, r) s.t. n = qm + r and 0 <= r < |m| returns this r
assert(m != 0);
if (m < 0) return Mod(n, -m);
if (n >= 0)
return n % m;
else
return (m + n % m) % m;
}
inline long long Quotient(long long n, long long m) {
// returns the "arithmetic quotient"
assert((n - Mod(n, m)) % m == 0);
return (n - Mod(n, m)) / m;
}
inline long long DivFloor(long long n, long long m) {
// returns floor(n / m)
assert(m != 0);
if (m < 0) {
n = -n;
m = -m;
}
if (n >= 0)
return n / m;
else if (n % m == 0)
return -(abs(n) / m);
else
return -(abs(n) / m) - 1;
}
inline long long DivCeil(long long n, long long m) {
// returns ceil(n / m)
assert(m != 0);
if (n % m == 0)
return DivFloor(n, m);
else
return DivFloor(n, m) + 1;
}
template <typename T>
inline T Sum(const std::vector<T> &vec) {
return std::accumulate(vec.begin(), vec.end(), T(0));
}
inline long long Max(const std::vector<long long> &v) {
return *std::max_element(v.begin(), v.end());
}
inline long long Min(const std::vector<long long> &v) {
return *std::min_element(v.begin(), v.end());
}
template <typename T, typename F>
bool Exists(const std::vector<T> &v, F &&f) {
return std::any_of(v.begin(), v.end(), f);
}
template <typename T, typename F>
bool ForAll(const std::vector<T> &v, F &&f) {
return std::all_of(v.begin(), v.end(), f);
}
class Sorted {
private:
const std::vector<long long> &vec_;
public:
Sorted(const std::vector<long long> &vec) : vec_(vec) {}
long long CountInRange(long long begin, long long end) {
return std::lower_bound(vec_.begin(), vec_.end(), end) -
std::lower_bound(vec_.begin(), vec_.end(), begin);
}
long long CountSmaller(long long x) {
return std::lower_bound(vec_.begin(), vec_.end(), x) - vec_.begin();
}
long long CountLarger(long long x) {
return vec_.end() - std::upper_bound(vec_.begin(), vec_.end(), x);
}
long long CountFrom(long long x) {
return vec_.end() - std::lower_bound(vec_.begin(), vec_.end(), x);
}
long long CountTo(long long x) {
return std::upper_bound(vec_.begin(), vec_.end(), x) - vec_.begin();
}
};
inline long long PowMod(long long x, long long n, const long long m) {
assert(n >= 0);
assert(m != 0);
if (x == 0) return 0;
long long res = 1;
x = Mod(x, m);
while (n > 0) {
if (n & 1) {
assert(x == 0 || std::abs(res) <= kMax / std::abs(x));
res = Mod(res * x, m);
}
if (n >>= 1) {
assert(x == 0 || std::abs(x) <= kMax / std::abs(x));
x = Mod(x * x, m);
}
}
return res;
}
void Print(std::string s) { cout << s << '\n'; }
void Print(long long x) { cout << x << '\n'; }
template <typename T>
void Print(std::vector<T> v) {
for (int i = 0; i < v.size(); ++i) {
cout << v[i] << " \n"[i == v.size() - 1];
}
}
} // namespace util
using namespace util;
using i128 = __int128;
std::istream &operator>>(std::istream &is, i128 &m) {
long long a;
is >> a;
m = a;
return is;
}
std::ostream &operator<<(std::ostream &os, const i128 &m) {
os << (long long)m;
return os;
}
struct F {
ll a;
ll b;
ll idx;
};
bool operator<(const F &p, const F &q) {
if (p.a * q.b != p.b * q.a) {
return p.a * q.b < p.b * q.a;
} else {
return p.idx > q.idx;
}
}
void solve() {
ll n, m;
cin >> n >> m;
vl a(m), b(m);
rep(i, n) { cin >> a[i]; }
vl id(n, 0);
iota(id.begin(), id.end(), 0);
sort(id.begin(), id.end(), [&a](ll i, ll j) { return a[i] < a[j]; });
rep(i, m) { cin >> b[i]; }
priority_queue<F> que;
rep(i, n) { que.push({a[id[i]], b[0], id[i]}); }
vl cur(n, 0);
rep(i, m) {
auto [aa, bb, idx] = que.top();
que.pop();
Print(idx + 1);
if (cur[idx] < m - 1) {
que.push({a[idx], b[cur[idx] + 1], idx});
cur[idx]++;
}
}
}
int main() {
std::cin.tie(nullptr);
std::ios::sync_with_stdio(false);
std::cout << std::fixed << std::setprecision(15);
solve();
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0