Submission #630087

# Submission time Handle Problem Language Result Execution time Memory
630087 2022-08-15T16:25:49 Z CyanForces Catfish Farm (IOI22_fish) C++17
9 / 100
1000 ms 28532 KB
#include "fish.h"

#include <bits/stdc++.h>
using namespace std;

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define debug(...) //ignore
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<ll> vi;
typedef long double ld;


bool smin(auto &a, auto&& b) { return (b < a) ? (a = b, 1) : 0; } 
bool smax(auto &a, auto&& b) { return (a < b) ? (a = b, 1) : 0; } 

long long max_weights(int N, int M, std::vector<int> X, std::vector<int> Y,
    std::vector<int> W) {

  int n = N, m = M;
  vi x(all(X)), y(all(Y));
  vi w(all(W));

  vector<vi> at_x(n);
  vector<vi> at_dp(n);
  rep(i,0,n) at_dp[i].emplace_back(-1);
  rep(i,0,m) {
    at_x[x[i]].emplace_back(i);
    if(x[i]) at_dp[x[i]-1].emplace_back(y[i]);
    if(x[i]+1 < n) at_dp[x[i]+1].emplace_back(y[i]);
  }
  rep(i,0,n) sort(all(at_dp[i]));
  rep(i,0,n) sort(all(at_x[i]), [&](int a, int b) { return y[a] < y[b]; });

  auto fish = [&](int x, int h0, int h1) -> ll {
    ll res = 0;
    for(int i : at_x[x]) if(h0 <= y[i] && y[i] <= h1) res += w[i];
    return res;
  };

  vector<vi> dp_inc(n), dp_dec(n);
  rep(i,0,n) {
    vi& cur_inc = dp_inc[i];
    vi& cur_dec = dp_dec[i];
    cur_inc.assign(sz(at_dp[i]),0);
    cur_dec.assign(sz(at_dp[i]),0);

    if(i == 0) continue;

    vi& prev_inc = dp_inc[i-1];
    vi& prev_dec = dp_dec[i-1];

    rep(j,0,sz(cur_inc)) {
      rep(jp,0,sz(prev_inc)) {
        int h_cur = at_dp[i][j];
        int h_prev = at_dp[i-1][jp];
        if(h_prev > h_cur) continue;
        smax(cur_inc[j], prev_inc[jp] + fish(i-1,h_prev+1,h_cur));
      }
    }

    rep(j,0,sz(cur_dec)) {
      rep(jp,0,sz(prev_dec)) {
        int h_cur = at_dp[i][j];
        int h_prev = at_dp[i-1][jp];
        if(h_prev < h_cur) continue;
        smax(cur_dec[j], prev_dec[jp] + fish(i,h_cur+1,h_prev));
      }
    }

    if(i == 1) continue;

    for(auto prev : {dp_inc[i-2], dp_dec[i-2]}) {
      rep(j,0,sz(at_dp[i])) {
        rep(jp,0,sz(prev)) {
          int h_cur = at_dp[i][j];
          int h_prev = at_dp[i-2][jp];
          ll q = prev[jp] + fish(i-1,0,max(h_prev, h_cur));
          smax(cur_inc[j], q);
          smax(cur_dec[j], q);
        }
      }
    }
  }

  ll ans = 0;
  ans = max(ans, *max_element(all(dp_inc[n-1])));
  ans = max(ans, *max_element(all(dp_dec[n-1])));
  if(n >= 2) {
    rep(jp,0,sz(at_dp[n-2])) {
      int h_prev = at_dp[n-2][jp];
      smax(ans, dp_inc[n-2][jp] + fish(n-1,0,h_prev));
      smax(ans, dp_dec[n-2][jp] + fish(n-1,0,h_prev));
    }
  }


  return ans;
}

Compilation message

fish.cpp:16:11: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   16 | bool smin(auto &a, auto&& b) { return (b < a) ? (a = b, 1) : 0; }
      |           ^~~~
fish.cpp:16:20: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   16 | bool smin(auto &a, auto&& b) { return (b < a) ? (a = b, 1) : 0; }
      |                    ^~~~
fish.cpp:17:11: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   17 | bool smax(auto &a, auto&& b) { return (a < b) ? (a = b, 1) : 0; }
      |           ^~~~
fish.cpp:17:20: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   17 | bool smax(auto &a, auto&& b) { return (a < b) ? (a = b, 1) : 0; }
      |                    ^~~~
# Verdict Execution time Memory Grader output
1 Execution timed out 1086 ms 18024 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1098 ms 24956 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 33 ms 19084 KB Output is correct
2 Correct 33 ms 19052 KB Output is correct
3 Correct 80 ms 22088 KB Output is correct
4 Correct 74 ms 22372 KB Output is correct
5 Correct 148 ms 28428 KB Output is correct
6 Correct 139 ms 28420 KB Output is correct
7 Correct 169 ms 28532 KB Output is correct
8 Correct 156 ms 28492 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Incorrect 6 ms 596 KB 1st lines differ - on the 1st token, expected: '799839985182', found: '799442630096'
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Incorrect 6 ms 596 KB 1st lines differ - on the 1st token, expected: '799839985182', found: '799442630096'
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Incorrect 6 ms 596 KB 1st lines differ - on the 1st token, expected: '799839985182', found: '799442630096'
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 33 ms 19084 KB Output is correct
2 Correct 33 ms 19052 KB Output is correct
3 Correct 80 ms 22088 KB Output is correct
4 Correct 74 ms 22372 KB Output is correct
5 Correct 148 ms 28428 KB Output is correct
6 Correct 139 ms 28420 KB Output is correct
7 Correct 169 ms 28532 KB Output is correct
8 Correct 156 ms 28492 KB Output is correct
9 Correct 133 ms 28520 KB Output is correct
10 Incorrect 106 ms 20224 KB 1st lines differ - on the 1st token, expected: '36454348383152', found: '36445372889528'
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1086 ms 18024 KB Time limit exceeded
2 Halted 0 ms 0 KB -