結果
| 問題 | No.3642 OHO SHI KA TSU(Buying ver.) |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-28 03:52:08 |
| 言語 | C++17 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 617 ms / 2,000 ms |
| + 717µs | |
| コード長 | 1,146 bytes |
| 記録 | |
| コンパイル時間 | 1,426 ms |
| コンパイル使用メモリ | 218,748 KB |
| 実行使用メモリ | 6,272 KB |
| 最終ジャッジ日時 | 2026-08-28 03:52:23 |
| 合計ジャッジ時間 | 4,992 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 小課題1 | 5 % | AC * 4 |
| 小課題2 | 3 % | AC * 3 |
| 小課題3 | 2 % | AC * 3 |
| 小課題4 | 10 % | AC * 3 |
| 小課題5 | 15 % | AC * 3 |
| 小課題6 | 20 % | AC * 3 |
| 小課題7 | 30 % | AC * 3 |
| 小課題8 | 15 % | AC * 31 |
| 合計 | 100 点 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
long long N,X,Y; cin >> N >> X >> Y;
vector<pair<long long,long long>> V;
while(N--){
long long w,v,c; cin >> w >> v >> c;
while(c){
if(!(c&1)) V.push_back({v,w}),c--;
V.push_back({v,w}),c--;
c >>= 1,v <<= 1,w <<= 1;
}
}
N = V.size();
double low = 0,high = 1000;
for(int t=0; t<60; t++){
double mid = (high+low)/2;
vector<double> dp(X,-1e18);
for(auto [v,w] : V){
auto next = dp;
double add = v-mid*w;
add += w/X*Y,w %= X;
next.at(w) = max(next.at(w),add);
for(int i=0; i<X; i++){
int to = i+w;
if(to >= X) add += Y;
next.at(to%X) = max(next.at(to%X),dp.at(i)+add);
if(to >= X) add -= Y;
}
swap(dp,next);
}
if(*max_element(dp.begin(),dp.end()) >= 0) low = mid;
else high = mid;
}
cout << fixed << setprecision(20) << low << endl;
}