結果
問題 | No.2617 容量3のナップザック |
ユーザー |
![]() |
提出日時 | 2024-01-26 22:07:57 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,393 bytes |
コンパイル時間 | 4,589 ms |
コンパイル使用メモリ | 257,252 KB |
最終ジャッジ日時 | 2025-02-18 23:19:38 |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 7 WA * 28 RE * 5 |
ソースコード
#include<bits/stdc++.h>using namespace std;//* ATCODER#include<atcoder/all>using namespace atcoder;typedef modint998244353 mint;//*//* BOOST MULTIPRECISION#include<boost/multiprecision/cpp_int.hpp>using namespace boost::multiprecision;//*/typedef long long ll;#define rep(i, s, n) for (int i = (int)(s); i < (int)(n); i++)#define rrep(i, s, n) for (int i = (int)(n)-1; i >= (int)(s); i--)template <typename T> bool chmin(T &a, const T &b) {if (a <= b) return false;a = b;return true;}template <typename T> bool chmax(T &a, const T &b) {if (a >= b) return false;a = b;return true;}template <typename T> T max(vector<T> &a){assert(!a.empty());T ret = a[0];for (int i=0; i<(int)a.size(); i++) chmax(ret, a[i]);return ret;}template <typename T> T min(vector<T> &a){assert(!a.empty());T ret = a[0];for (int i=0; i<(int)a.size(); i++) chmin(ret, a[i]);return ret;}template <typename T> T sum(vector<T> &a){T ret = 0;for (int i=0; i<(int)a.size(); i++) ret += a[i];return ret;}int main(){int n, k; cin >> n >> k;ll seed; cin >> seed;ll a, b, m; cin >> a >> b >> m;vector<ll> v(n), w(n);vector<ll> f(n * 2);f[0] = seed;for (int i=1; i<n * 2; i++){f[i] = (a * f[i-1] + b) % m;}for (int i=0; i<n; i++){w[i] = f[i] % 3 + 1;v[i] = w[i] * f[n + i];}vector<ll> w1;vector<ll> w2;vector<ll> w3;rep(i,0,n){if (w[i] == 1){w1.push_back(v[i]);}else if(w[i] == 2){w2.push_back(v[i]);}else if(w[i] == 3){w3.push_back(v[i]);}}sort(w1.begin(), w1.end());sort(w2.begin(), w2.end());sort(w3.begin(), w3.end());reverse(w1.begin(), w1.end());reverse(w2.begin(), w2.end());reverse(w3.begin(), w3.end());int n1 = w1.size();int n2 = w2.size();int n3 = w3.size();vector<ll> rui1(n1 + 1);vector<ll> rui2(n2 + 1);vector<ll> rui3(n3 + 1);rep(i,0,n1) rui1[i+1] = w1[i];rep(i,0,n2) rui2[i+1] = w2[i];rep(i,0,n3) rui3[i+1] = w3[i];rep(i,0,n1) rui1[i+1] += rui1[i];rep(i,0,n2) rui2[i+1] += rui2[i];rep(i,0,n3) rui3[i+1] += rui3[i];vector<int> threes(3);vector<int> ones(3);vector<ll> var(3);ll ans = 0;rep(l,0,k+1){ll tmp = 0;tmp += rui2[min(l, n2)];while (ones[l % 3] <= min(l, n1)){var[l % 3] += w1[ones[l % 3]];ones[l % 3]++;}while((ones[l % 3] - min(l, n1)) % 3 != 0){ones[l % 3]--;var[l % 3] -= w1[ones[l % 3]];}if(ones[l % 3] > l){ones[l % 3]--;var[l % 3] -= w1[ones[l % 3]];ones[l % 3]--;var[l % 3] -= w1[ones[l % 3]];ones[l % 3]--;var[l % 3] -= w1[ones[l % 3]];}if(ones[l % 3] > l){ones[l % 3]--;var[l % 3] -= w1[ones[l % 3]];ones[l % 3]--;var[l % 3] -= w1[ones[l % 3]];ones[l % 3]--;var[l % 3] -= w1[ones[l % 3]];}if (threes[l % 3] >= 1){threes[l % 3]--;var[l % 3] -= w3[threes[l % 3]];}if (threes[l % 3] >= 1){threes[l % 3]--;var[l % 3] -= w3[threes[l % 3]];}while ((ones[l % 3] - l) / 3 + threes[l % 3] < k - l){if (rui1[min(ones[l%3] + 3, n1)] - rui1[min(ones[l%3], n1)]<= rui3[min(threes[l%3] + 1, n3)] - rui3[min(threes[l%3], n3)]){var[l%3] += rui3[min(threes[l%3] + 1, n3)] - rui3[min(threes[l%3], n3)];threes[l%3]++;}else{var[l%3] += rui1[min(ones[l%3] + 3, n1)] - rui1[min(ones[l%3], n1)];ones[l%3] += 3;}}chmax(ans, var[l%3] + tmp);}cout << ans << '\n';}