답안 #782430

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
782430 2023-07-14T00:49:27 Z eltu0815 Sightseeing in Kyoto (JOI22_kyoto) C++14
0 / 100
2000 ms 126164 KB
#include <bits/stdc++.h>
#define MAX 500005
#define MOD (ll)(1e9+7)
#define INF (ll)(1e18)
#define inf (1987654321)
 
using namespace std;    
typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
 
int n, m, q;
int a[100005], b[100005];
int mna[1005], mxa[1005];
int mnb[1005], mxb[1005];
map<pii, ll> mp;
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    cin >> n >> m;
    for(int i = 1; i <= n; ++i) cin >> a[i];
    for(int i = 1; i <= m; ++i) cin >> b[i];
    for(int i = 1; i <= 1000; ++i) {
        mna[i] = mnb[i] = inf;
        mxa[i] = mxb[i] = -1;
    }
    for(int i = 1; i <= n; ++i) mna[a[i]] = min(mna[a[i]], i), mxa[a[i]] = max(mxa[a[i]], i);
    for(int i = 1; i <= m; ++i) mnb[b[i]] = min(mnb[b[i]], i), mxb[b[i]] = max(mxb[b[i]], i);
    
    vector<int> row, col;
    for(int i = 1; i <= 1000; ++i) {
        if(mna[i] == inf) continue;
        row.push_back(mna[i]);
        if(mna[i] != mxa[i]) row.push_back(mxa[i]);
    }
    for(int i = 1; i <= 1000; ++i) {
        if(mnb[i] == inf) continue;
        col.push_back(mnb[i]);
        if(mnb[i] != mxb[i]) col.push_back(mxb[i]);
    }
    sort(row.begin(), row.end());
    sort(col.begin(), col.end());
    
    assert(row.size() <= 2000);
    assert(col.size() <= 2000);
    
    for(int i = 0; i < (int)col.size(); ++i) mp[{row[0], col[i]}] = a[row[0]] * (col[i] - 1);
    for(int i = 1; i < (int)row.size(); ++i) {
        for(int j = 0; j < (int)col.size(); ++j) {
            if(j == 0) mp[{row[i], col[0]}] = b[col[0]] * (row[i] - 1);
            else {
                mp[{row[i], col[j]}] = inf;
                mp[{row[i], col[j]}] = min(mp[{row[i], col[j]}], mp[{row[i - 1], col[j]}] + b[col[j]] * (row[i] - row[i - 1]));
                mp[{row[i], col[j]}] = min(mp[{row[i], col[j]}], mp[{row[i], col[j - 1]}] + a[row[i]] * (col[j] - col[j - 1]));
            }
        }
    }
    cout << mp[{row.back(), col.back()}];
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Runtime error 1 ms 468 KB Execution killed with signal 11
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 302 ms 19932 KB Output is correct
4 Execution timed out 2057 ms 126164 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Runtime error 1 ms 468 KB Execution killed with signal 11
4 Halted 0 ms 0 KB -