Submission #293882

# Submission time Handle Problem Language Result Execution time Memory
293882 2020-09-08T13:27:18 Z arnold518 Two Dishes (JOI19_dishes) C++14
0 / 100
10000 ms 31076 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int MAXN = 1e6;

struct Point
{
	int x, y; ll w;
};
vector<Point> V;

int N, M;
ll ans;

ll A[MAXN+10], S[MAXN+10], P[MAXN+10], B[MAXN+10], T[MAXN+10], Q[MAXN+10];

ll dp[MAXN+10];

int main()
{
	scanf("%d%d", &N, &M);
	for(int i=1; i<=N; i++) scanf("%lld%lld%lld", &A[i], &S[i], &P[i]), A[i]+=A[i-1];
	for(int i=1; i<=M; i++) scanf("%lld%lld%lld", &B[i], &T[i], &Q[i]), B[i]+=B[i-1];

	for(int i=1; i<=N; i++)
	{
		int t=upper_bound(B, B+M+1, S[i]-A[i])-B-1;
		if(t<0) continue;
		if(t==M) { ans+=P[i]; continue; }
		int x=i, y=t;
		x--; y++;
		V.push_back({x, y, -P[i]}); ans+=P[i];
	}
	for(int i=1; i<=M; i++)
	{
		int t=upper_bound(A, A+N+1, T[i]-B[i])-A-1;
		if(t<0) continue;
		if(t==N) { ans+=Q[i]; continue; }
		int y=i, x=t;
		V.push_back({x, y, Q[i]});
	}

	sort(V.begin(), V.end(), [&](const Point &p, const Point &q)
	{
		if(p.x!=q.x) return p.x<q.x;
		if(p.w!=q.w) return p.y>q.y;
		return p.w>q.w;
	});

	for(int i=0; i<V.size(); i++)
	{
		for(int j=V[i].y; j<=M; j++) dp[j]+=V[i].w;
		for(int j=1; j<=M; j++) dp[j]=max(dp[j], dp[j-1]);
	}
	printf("%lld\n", dp[M]+ans);
}

Compilation message

dishes.cpp: In function 'int main()':
dishes.cpp:54:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<Point>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |  for(int i=0; i<V.size(); i++)
      |               ~^~~~~~~~~
dishes.cpp:25:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   25 |  scanf("%d%d", &N, &M);
      |  ~~~~~^~~~~~~~~~~~~~~~
dishes.cpp:26:31: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   26 |  for(int i=1; i<=N; i++) scanf("%lld%lld%lld", &A[i], &S[i], &P[i]), A[i]+=A[i-1];
      |                          ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dishes.cpp:27:31: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   27 |  for(int i=1; i<=M; i++) scanf("%lld%lld%lld", &B[i], &T[i], &Q[i]), B[i]+=B[i-1];
      |                          ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Execution timed out 10057 ms 31076 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 10057 ms 31076 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 10057 ms 31076 KB Time limit exceeded
2 Halted 0 ms 0 KB -