Submission #103319

# Submission time Handle Problem Language Result Execution time Memory
103319 2019-03-29T18:04:48 Z RockyB Wiring (IOI17_wiring) C++17
13 / 100
44 ms 2936 KB
/// In The Name Of God

#include <bits/stdc++.h>

#define f first
#define s second

#define pb push_back
#define pp pop_back
#define mp make_pair

#define sz(x) (int)x.size()
#define sqr(x) ((x) * 1ll * (x))
#define all(x) x.begin(), x.end()

#define rep(i, l, r) for (int i = (l); i <= (r); i++)
#define per(i, l, r) for (int i = (l); i >= (r); i--)

#define Kazakhstan ios_base :: sync_with_stdio(0), cin.tie(0), cout.tie(0);

#define nl '\n'
#define ioi exit(0);

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;

const int N = (int)5e5 + 7;
const int inf = (int)1e9 + 7;
const int mod = (int)1e9 + 7;
const ll linf = (ll)1e18 + 7;

const int dx[] = {-1, 0, 1, 0, 1, -1, -1, 1};
const int dy[] = {0, 1, 0, -1, 1, -1, 1, -1};

using namespace std;


int n, m;
int a[N], b[N];


namespace s2 {
	ll get() {
		ll res = 0;
		int mn = min(n, m);
		rep(i, 1, mn) res += b[i] - a[i];
		if (n > m) {
			rep(i, mn + 1, n) res += b[1] - a[i];
		}
		if (n < m) {
			rep(i, mn + 1, m) res += b[i] - a[n];
		}
		return res;
	}
}

int dp[201][201];
int calc(int v1 = 1, int v2 = 1) {
	if (v1 > n && v2 > m) return 0; 
	if (~dp[v1][v2]) return dp[v1][v2];
	int res = inf;
	/// 1 & 1
	if (v1 <= n && v2 <= m) res = min(res, calc(v1 + 1, v2 + 1));
	/// 1 & 0
	if (v1 <= n) res = min(res, calc(v1 + 1, v2));
	/// 0 & 1
	if (v2 <= m) res = min(res, calc(v1, v2 + 1));
	return dp[v1][v2] = res + abs(b[min(m, v2)] - a[min(n, v1)]);
}	
ll min_total_length(vector <int> _r, vector <int> _b) {
	n = sz(_r), m = sz(_b);
	rep(i, 1, n) a[i] = _r[i - 1];
	rep(i, 1, m) b[i] = _b[i - 1];

	if (a[n] < b[1]) return s2 :: get();
	memset(dp, -1, sizeof(dp));
	return calc();
}

#ifdef IOI2018

namespace read {

	void read() {
		int n, m;
		assert(2 == scanf("%d %d", &n, &m));

		vector<int> r(n), b(m);
		for(int i = 0; i < n; i++)
			assert(1 == scanf("%d", &r[i]));
		for(int i = 0; i < m; i++)
			assert(1 == scanf("%d", &b[i]));

		long long res = min_total_length(r, b);
		printf("%lld\n", res);
		ioi
	}
}

int main() {
	#ifdef IOI2018
		freopen ("in.txt", "r", stdin);
	#endif
	read :: read();
	ioi
}

#endif
# Verdict Execution time Memory Grader output
1 Correct 3 ms 512 KB Output is correct
2 Correct 2 ms 512 KB Output is correct
3 Correct 2 ms 512 KB Output is correct
4 Correct 2 ms 512 KB Output is correct
5 Correct 2 ms 512 KB Output is correct
6 Correct 2 ms 512 KB Output is correct
7 Incorrect 2 ms 512 KB 3rd lines differ - on the 1st token, expected: '445668', found: '445433'
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 356 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
3 Correct 32 ms 2168 KB Output is correct
4 Correct 42 ms 2076 KB Output is correct
5 Correct 44 ms 2168 KB Output is correct
6 Correct 32 ms 2652 KB Output is correct
7 Correct 41 ms 2732 KB Output is correct
8 Correct 33 ms 2680 KB Output is correct
9 Correct 37 ms 2680 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 3 ms 512 KB Output is correct
3 Incorrect 38 ms 2936 KB 3rd lines differ - on the 1st token, expected: '1068938599', found: '4450601'
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 512 KB Output is correct
2 Incorrect 33 ms 2808 KB 3rd lines differ - on the 1st token, expected: '373710605', found: '865792'
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 512 KB Output is correct
2 Correct 2 ms 512 KB Output is correct
3 Correct 2 ms 512 KB Output is correct
4 Correct 2 ms 512 KB Output is correct
5 Correct 2 ms 512 KB Output is correct
6 Correct 2 ms 512 KB Output is correct
7 Incorrect 2 ms 512 KB 3rd lines differ - on the 1st token, expected: '445668', found: '445433'
8 Halted 0 ms 0 KB -