Submission #52951

# Submission time Handle Problem Language Result Execution time Memory
52951 2018-06-27T08:37:19 Z 0^0(#1376) Popeala (CEOI16_popeala) C++11
0 / 100
488 ms 19112 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, t, s;
const ll inf = 0x3f3f3f3f3f3f3f3f;

int p[20005];
int r[55][20005];
int sum[20005];
int q[20005][55];
ll dp[2][55][20005];
int ri[55];
int dq[55][20005];
int head[55], tail[55];
long long query(int bit, int idx, int l, int r) {
	assert(head[idx] <= tail[idx]);
	assert(0 <= head[idx] && head[idx] < 20005);
	assert(0 <= tail[idx] && tail[idx] < 20005);
	for (int i = ri[idx] + 1; i <= r; i++) {
		while (tail[idx] - head[idx] && dp[bit][idx][dq[idx][tail[idx] - 1]] >= dp[bit][idx][i])tail[idx]--;
		dq[idx][tail[idx]++] = i;
	}
	ri[idx] = r;
	while (tail[idx] - head[idx] && dq[idx][head[idx]] < l)head[idx]++;
	if (l > r)return inf;
	return dp[bit][idx][dq[idx][head[idx]]];
}
void solve(int k) {
	int now = k & 1;
	int pre = 1 - now;
	for (int i = 0; i <= n; i++) {
		dp[now][i][0] = inf;
		head[i] = tail[i] = 0;
		ri[i] = -1;
	}
	for (int i = 1; i <= t; i++) {
		int c = n;
		long long val = inf;
		int ri = i;
		for(int j=0;j<n;j++){
			int le = ri - q[i][j] + 1;
			val = min(val, query(pre, c, le - 1, ri - 1) + c * sum[i]);
			c--;
			ri = le - 1;
		}
		val = min(val, query(pre, c, 0, ri - 1));
		for (int j = 0; j <= n; j++)
			dp[now][j][i] = val - j * sum[i];
		if (i == t) printf("%lld\n", val);
	}
}
int main() {
	scanf("%d%d%d", &n, &t, &s);
	for (int i = 1; i <= t; i++) {
		scanf("%d", &p[i]);
		sum[i] = sum[i - 1] + p[i];
	}
	for (int i = 0; i < n; i++) {
		int cnt = 0;
		for (int j = 1; j <= t; j++) {
			scanf("%1d", &r[i][j]);
			if (r[i][j])cnt++;
			else cnt = 0;
			q[j][i] = cnt;
		}
	}
	for (int i = 1; i <= t; i++) {
		sort(q[i], q[i] + n);
		for (int j = 1; j < n; j++)
			q[i][j] -= q[i][j - 1];
	}
	memset(dp, 0x3f, sizeof(dp));
	for (int i = 0; i <= n; i++)
		dp[0][i][0] = 0;
	for (int i = 1; i <= s; i++)
		solve(i);
	return 0;
}

Compilation message

popeala.cpp: In function 'int main()':
popeala.cpp:53:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d", &n, &t, &s);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~
popeala.cpp:55:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &p[i]);
   ~~~~~^~~~~~~~~~~~~
popeala.cpp:61:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%1d", &r[i][j]);
    ~~~~~^~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 16 ms 17656 KB Output is correct
2 Incorrect 21 ms 18024 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 107 ms 18280 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 488 ms 19112 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 16 ms 17656 KB Output is correct
2 Incorrect 21 ms 18024 KB Output isn't correct