Submission #868163

# Submission time Handle Problem Language Result Execution time Memory
868163 2023-10-30T15:44:04 Z nnhzzz Soccer (JOI17_soccer) C++14
35 / 100
256 ms 32628 KB
// cre: Nguyen Ngoc Hung - Train VOI 2024 :>

#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <unordered_set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#include <cstring>
#include <unordered_map>
#include <cmath>
#include <array>
#include <cassert>
#include <random>

using namespace std;

#define        __nnhzzz__  signed main()
#define          BIT(i,j)  ((i>>j)&1LL)
#define           MASK(i)  (1LL<<i)
#define            ALL(x)  (x).begin(),(x).end()
#define             SZ(x)  (int)(x).size()
#define                fi  first
#define                se  second
#define                ll  long long
#define                vi  vector<int>
#define               vvi  vector<vi>
#define               pii  pair<int,int>
#define              vpii  vector<pii>
#define REPDIS(i,be,en,j)  for(int i = (be); i<=(en); i+=j)
#define     REPD(i,be,en)  for(int i = (be); i>=(en); i--)
#define      REP(i,be,en)  for(int i = (be); i<=(en); i++)
#define               int  ll

//------------------------------------------------------------------------------------------------//
int readInt(){
    char c;
    do{ c = getchar(); }while(c!='-' && !isdigit(c));
    bool neg = (c=='-');
    int res = neg?0:c-'0';
    while(isdigit(c=getchar())) res = (res<<3)+(res<<1)+(c-'0');
    return neg?-res:res;
}
//------------------------------------------------------------------------------------------------//
const int oo = 1e9,LOG = 20,MAXN = 5e2+7,N = 1e5+3;
const int MOD = 1e9+7,MOD1 = 1e9+207,MOD2 = 1e9+407,MOD3 = 998244353;
const int dx[] = {0,0,-1,1},dy[] = {-1,1,0,0};
//------------------------------------------------------------------------------------------------//
template<typename T1, typename T2> bool mini(T1 &a, T2 b){if(a>b){a=b;return true;}return false;}
template<typename T1, typename T2> bool maxi(T1 &a, T2 b){if(a<b){a=b;return true;}return false;}
template<typename T> T gcd(T a, T b) { while(b) { a %= b; swap(a,b); } return a; }
template<typename T> T lcm(T a, T b) { return a/gcd(a,b)*b; }
//------------------------------------------------------------------------------------------------//

/*
----------------------------------------------------------------
    END OF TEMPLATE
----------------------------------------------------------------
    Nguyen Ngoc Hung - nnhzzz
    Training for VOI24 gold medal
----------------------------------------------------------------
*/

struct Node{
    int w,x,y,t;
    Node(int w, int x, int y, int t):w(w),x(x),y(y),t(t){}
    bool operator < (const Node &other) const {
        return w>other.w;
    }
};

int dis[MAXN][MAXN],dp[MAXN][MAXN][5];
pii a[N],st,en;
int n,m,A,B,C,k;

bool ok(int x, int y){
    return x>=0 && y>=0 && x<=n && y<=m;
}

void solve(){
    n = readInt(); m = readInt();
    A = readInt(); B = readInt(); C = readInt();
    k = readInt();
    memset(dis,0x3f,sizeof dis); memset(dp,0x3f,sizeof dp);
    priority_queue<Node> heap; queue<pii> q;
    REP(i,1,k){
        a[i].fi = readInt(); a[i].se = readInt();
        dis[a[i].fi][a[i].se] = 0;
        q.emplace(a[i].fi,a[i].se);
    }
    st = a[1]; en = a[k];
    while(SZ(q)!=0){
        const auto &[x,y] = q.front(); q.pop();
        REP(i,0,3){
            int nx = x+dx[i],ny = y+dy[i];
            if(ok(nx,ny)==false) continue;
            if(mini(dis[nx][ny],dis[x][y]+1)){
                q.emplace(nx,ny);
            }
        }
    }
    heap.push(Node(0,st.fi,st.se,4));
    dp[st.fi][st.se][4] = 0; // i,j,4 - den o i,j dang du bong
    while(SZ(heap)!=0){
        const Node &node = heap.top(); heap.pop();
        int w1 = node.w,x = node.x,y = node.y,t = node.t;
        if(dp[x][y][t]!=w1) continue;
        if(t==4){
            REP(i,0,3){
                int nx = x+dx[i],ny = y+dy[i];
                if(ok(nx,ny)==false) continue;
                if(mini(dp[nx][ny][4],dp[x][y][4]+C)) heap.push(Node(dp[nx][ny][4],nx,ny,4));
                if(mini(dp[x][y][i],dp[x][y][4]+B)) heap.push(Node(dp[x][y][i],x,y,i));
            }
            continue;
        }
        int nx = x+dx[t],ny = y+dy[t];
        if(ok(nx,ny)==true && mini(dp[nx][ny][t],dp[x][y][t]+A)) heap.push(Node(dp[nx][ny][t],nx,ny,t));
        if(mini(dp[x][y][4],dp[x][y][t]+dis[x][y]*C)) heap.push(Node(dp[x][y][4],x,y,4));
    }
    cout << dp[en.fi][en.se][4];
}

__nnhzzz__{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    #define name "test"
    if(fopen(name".inp","r")){
        freopen(name".inp","r",stdin);
        freopen(name".out","w",stdout);
    }
    #define name1 "nnhzzz"
    if(fopen(name1".inp","r")){
        freopen(name1".inp","r",stdin);
        freopen(name1".out","w",stdout);
    }

    int test = 1;

    while(test--){
      solve();
    }
    cerr << "\nTime elapsed: " << 1000*clock()/CLOCKS_PER_SEC << "ms\n";
    return 0;
}

Compilation message

soccer.cpp: In function 'void solve()':
soccer.cpp:120:21: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  120 |         const auto &[x,y] = q.front(); q.pop();
      |                     ^
soccer.cpp: In function 'int main()':
soccer.cpp:156:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  156 |         freopen(name".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
soccer.cpp:157:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  157 |         freopen(name".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
soccer.cpp:161:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  161 |         freopen(name1".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
soccer.cpp:162:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  162 |         freopen(name1".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 46 ms 16080 KB Output is correct
2 Correct 3 ms 13916 KB Output is correct
3 Correct 193 ms 22672 KB Output is correct
4 Correct 199 ms 22976 KB Output is correct
5 Correct 30 ms 13912 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 239 ms 23520 KB Output is correct
2 Correct 200 ms 23028 KB Output is correct
3 Correct 156 ms 23024 KB Output is correct
4 Correct 160 ms 23232 KB Output is correct
5 Correct 181 ms 22968 KB Output is correct
6 Correct 173 ms 23288 KB Output is correct
7 Correct 185 ms 22716 KB Output is correct
8 Correct 228 ms 24060 KB Output is correct
9 Correct 195 ms 23484 KB Output is correct
10 Correct 30 ms 16080 KB Output is correct
11 Correct 232 ms 23232 KB Output is correct
12 Correct 201 ms 22972 KB Output is correct
13 Correct 137 ms 24276 KB Output is correct
14 Correct 186 ms 24096 KB Output is correct
15 Correct 164 ms 22848 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 46 ms 16080 KB Output is correct
2 Correct 3 ms 13916 KB Output is correct
3 Correct 193 ms 22672 KB Output is correct
4 Correct 199 ms 22976 KB Output is correct
5 Correct 30 ms 13912 KB Output is correct
6 Correct 239 ms 23520 KB Output is correct
7 Correct 200 ms 23028 KB Output is correct
8 Correct 156 ms 23024 KB Output is correct
9 Correct 160 ms 23232 KB Output is correct
10 Correct 181 ms 22968 KB Output is correct
11 Correct 173 ms 23288 KB Output is correct
12 Correct 185 ms 22716 KB Output is correct
13 Correct 228 ms 24060 KB Output is correct
14 Correct 195 ms 23484 KB Output is correct
15 Correct 30 ms 16080 KB Output is correct
16 Correct 232 ms 23232 KB Output is correct
17 Correct 201 ms 22972 KB Output is correct
18 Correct 137 ms 24276 KB Output is correct
19 Correct 186 ms 24096 KB Output is correct
20 Correct 164 ms 22848 KB Output is correct
21 Correct 38 ms 14548 KB Output is correct
22 Correct 241 ms 22452 KB Output is correct
23 Correct 238 ms 19912 KB Output is correct
24 Correct 246 ms 19792 KB Output is correct
25 Correct 227 ms 23904 KB Output is correct
26 Correct 256 ms 23660 KB Output is correct
27 Runtime error 29 ms 32628 KB Execution killed with signal 11
28 Halted 0 ms 0 KB -