Submission #52931

# Submission time Handle Problem Language Result Execution time Memory
52931 2018-06-27T08:05:44 Z 0^0(#1376) Popeala (CEOI16_popeala) C++11
0 / 100
22 ms 3776 KB
#include <bits/stdc++.h>
using namespace std;
int n, t, s;
const int inf = 2e9 + 5;

int p[20005];
int r[55][20005];
int sum[20005];
int q[20005][55];
int dp[2][55][20005];
int ri[55];
deque<int> dq[55];
long long query(int bit, int idx, int l, int r) {
	while (!dq[idx].empty()&&dq[idx].front() < l)dq[idx].pop_front();
	for (int i = ri[idx] + 1; i <= r; i++) {
		while (!dq[idx].empty()&&dp[bit][idx][dq[idx].back()] >= dp[bit][idx][i])dq[idx].pop_back();
		dq[idx].push_back(i);
	}
	ri[idx] = r;
	if (l > r)return inf;
	return dp[bit][idx][dq[idx].front()];
}
void solve(int k) {
	int now = k & 1;
	int pre = 1 - now;
	for (int i = 0; i <= n; i++) {
		dp[now][i][0] = inf;
		dq[i].clear();
		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, 0, 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];
	}
	for (int i = 1; i <= s; i++)
		solve(i);
	return 0;
}

Compilation message

popeala.cpp: In function 'int main()':
popeala.cpp:48: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:50:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &p[i]);
   ~~~~~^~~~~~~~~~~~~
popeala.cpp:56: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 2 ms 376 KB Output is correct
2 Incorrect 4 ms 996 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Runtime error 10 ms 2724 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 22 ms 3776 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Incorrect 4 ms 996 KB Output isn't correct