Submission #755923

#TimeUsernameProblemLanguageResultExecution timeMemory
755923vjudge1Pinball (JOI14_pinball)C++17
0 / 100
1 ms340 KiB
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;
const ll MOD = 1e9 + 7;
ll mod(ll x, ll m = MOD){return (x + m) % m;}

typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<ll,ll> pll;

typedef vector<pair<int,int>> vpi;

#define pb push_back

#define ff first
#define ss second
#define all(x) (x).begin(),(x).end()


const int nax = 2005;
const ll INF = 1e14;

int n, m;
int l[nax], r[nax], to[nax];
ll cost[nax];
int corl[nax], corr[nax];
indexed_set nidl, nidr;

void solve()
{
    cin >> m >> n;
    for(int i = m; i >= 1; i--)
    {
        cin >> l[i] >> r[i] >> to[i] >> cost[i];
        nidl.insert(l[i]);
        nidr.insert(r[i]);
        nidl.insert(to[i]);
        nidr.insert(to[i]);
        nidl.insert(r[i]);
        nidr.insert(l[i]);
    }
    int szl = nidl.size();
    int szr = nidr.size();
    ll dp[m + 2][szl + 1][szr + 1];
    for(int i = 1; i <= m; i++)
    {
        l[i] = nidl.order_of_key(l[i]);
        r[i] = nidr.order_of_key(r[i]);
    }
    int cnt = 0;
    for(auto e: nidl)
    {
        corl[cnt++] = e;
    }
    cnt = 0;
    for(auto e: nidr)
        corr[cnt++] = e;
    ll ans = INF;
    for(int i = m + 1; i >= 0; i--)
    {
        int b = (i & 1);
        for(int j = 0;j < szl; j++)
        {
            for(int k = 0; k < szr; k++)
            {
                if(i == m + 1)
                {
                    if(j == 0 && k == szr - 1)
                        dp[i][j][k] = 0ll;
                    else
                        dp[i][j][k] = INF;
                }
                else
                {
                    dp[i][j][k] = dp[i + 1][j][k];
                    if(i != 0 && to[i] >= corl[j] && to[i] <= corr[k])
                    {
                        dp[i][j][k] = min(dp[i + 1][j][k],
                                          dp[i + 1][min(j, l[i])][max(k, r[i])] + cost[i]);
                    }
                }
                if(i == 0 && corl[j] == corr[k])
                    ans = min(ans, dp[i][j][k]);
            }
        }
    }
    cout << ans;
}
int32_t main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int tt = 1; //cin >> tt;
    while(tt--)
        solve();

}

Compilation message (stderr)

pinball.cpp: In function 'void solve()':
pinball.cpp:65:13: warning: unused variable 'b' [-Wunused-variable]
   65 |         int b = (i & 1);
      |             ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...