結果
問題 |
No.3282 Photos and Friends
|
ユーザー |
|
提出日時 | 2025-09-27 01:40:49 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 619 ms / 2,000 ms |
コード長 | 977 bytes |
コンパイル時間 | 968 ms |
コンパイル使用メモリ | 88,812 KB |
実行使用メモリ | 12,416 KB |
最終ジャッジ日時 | 2025-09-27 01:41:01 |
合計ジャッジ時間 | 11,023 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 50 |
ソースコード
#include <iostream> #include <vector> using namespace std; using ll = long long; int main() { int N;ll P, Q;cin >> N >> P >> Q; vector<ll> X(N), A(N), B(N); for (int i = 0;i < N;i++) cin >> X[i] >> A[i] >> B[i]; vector<ll> C(N); ll sa = 0; ll sc = 0; vector<ll >D(N); ll T = 0; ll sx = 0; for (int i = 0;i < N;i++) { if (A[i]+B[i] < X[i]) { cout << "No" << endl; return 0; } sa += A[i]; C[i] = max(0LL, X[i]-B[i]); sc += C[i]; sx += X[i]; D[i] = min(X[i],A[i]); T += D[i]; if (D[i] < C[i]) { cout << "No" << endl; return 0; } } ll L = max(sc, sx - Q); ll R = min(P, T); if (L > R) { cout << "No" << endl; return 0; } cout << "Yes" << endl; vector<ll> ret = C; ll now = sc; for (int i = 0;i < N;i++) { if (now == L) break; ll dif = L - now; if (C[i]+dif <= D[i]) { ret[i] += dif; break; } ret[i] = D[i]; now += D[i] - C[i]; } for (int i = 0;i < N;i++) cout << ret[i] << " " << X[i] - ret[i] << endl; }