Submission #791003

#TimeUsernameProblemLanguageResultExecution timeMemory
791003penguinmanCatfish Farm (IOI22_fish)C++17
14 / 100
1067 ms6832 KiB
#include "fish.h" #include <bits/stdc++.h> using std::vector; using std::string; using std::cin; using std::cout; using ll = long long; using vi = vector<ll>; using vii = vector<vi>; using pii = std::pair<ll,ll>; #define ln "\n" #define rep(i,j,k) for(ll i=ll(j); i<ll(k); i++) #define REP(i,j,k) for(ll i=ll(j); i<=ll(k); i++) #define per(i,j,k) for(ll i=ll(j); i>=ll(k); i--) #define all(a) a.begin(), a.end() #define mp std::make_pair #define pb emplace_back constexpr ll inf = (1ll<<60); long long max_weights(int N, int M, std::vector<int> X, std::vector<int> Y, std::vector<int> W) { // task 6 if(N > 3000) return N; rep(i,0,M) X[i]++, Y[i]++; // data1 : その行 // data2 : 隣接 vector<vector<pii>> data1(N+2), data2(N+2); rep(i,0,M){ data1[X[i]].pb(mp(Y[i],W[i])); if(X[i]-1) data2[X[i]-1].pb(mp(Y[i],W[i])); if(X[i]+1 <= N) data2[X[i]+1].pb(mp(Y[i],W[i])); } vii sum(N+2); rep(i,0,N+2){ data1[i].pb(mp(0,0)); data2[i].pb(mp(0,0)); sort(all(data1[i])); sort(all(data2[i])); sum[i].resize(data1[i].size()); rep(j,1,data1[i].size()) sum[i][j] = sum[i][j-1]+data1[i][j].second; } auto id = [&](ll x, ll height){ ll idx = std::upper_bound(all(data1[x]), mp(height, inf))-data1[x].begin(); idx--; return idx; }; auto calc = [&](ll x, ll height){ ll idx = std::upper_bound(all(data1[x]), mp(height, inf))-data1[x].begin(); idx--; return sum[x][idx]; }; vii up(N+2), down(N+2); up[0].resize(1); down[0].resize(1); up[0][0] = down[0][0] = 0; rep(i,1,N+2){ up[i].resize(data2[i].size(),-inf); down[i].resize(data2[i].size(),-inf); rep(j,0,data2[i].size()){ rep(k,0,data2[i-1].size()){ if(data2[i-1][k] <= data2[i][j]){ up[i][j] = std::max(up[i][j], up[i-1][k]+calc(i-1, data2[i][j].first)-calc(i-1, data2[i-1][k].first)); } if(data2[i-1][k] >= data2[i][j]){ down[i][j] = std::max(down[i][j], down[i-1][k]+calc(i, data2[i-1][k].first)-calc(i, data2[i][j].first)); } } } if(i-2 >= 0){ rep(j,0,data2[i].size()){ rep(k,0,data2[i-2].size()){ up[i][j] = std::max(up[i][j], down[i-2][k]+calc(i-1, std::max(data2[i-2][k].first, data2[i][j].first))); } } } if(i-3 >= 0){ rep(j,0,data2[i].size()){ rep(k,0,data2[i-3].size()){ up[i][j] = std::max(up[i][j], down[i-3][k]+calc(i-2, data2[i-3][k].first)+calc(i-1,data2[i][j].first)); } } } rep(j,0,data2[i].size()) down[i][j] = std::max(down[i][j], up[i][j]); } ll ans = std::max(up[N+1][0], down[N+1][0]); return ans; }

Compilation message (stderr)

fish.cpp: In function 'long long int max_weights(int, int, std::vector<int>, std::vector<int>, std::vector<int>)':
fish.cpp:43:8: warning: variable 'id' set but not used [-Wunused-but-set-variable]
   43 |   auto id = [&](ll x, ll height){
      |        ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...