Submission #106393

# Submission time Handle Problem Language Result Execution time Memory
106393 2019-04-18T09:06:31 Z antimirage Two Dishes (JOI19_dishes) C++14
0 / 100
313 ms 83568 KB
/**
	Elohim Esaim, Elohim Esaim I implore you...
**/
#include <bits/stdc++.h>
 
#define fr first
#define sc second
#define mk make_pair
#define pb push_back
#define all(s) s.begin(), s.end()
 
using namespace std;

const int N = 1e6 + 5;

int n, m;

long long pref[2][N], bal[2][N], t[2][N], s[2][N], ans, inf = 1e18;

vector < pair <int, long long> > vec[2][N];

main(){
	
	cin >> n >> m;
	
	for (int i = 1; i <= n; i++){
		
		scanf("%lld%lld%lld", &t[0][i], &s[0][i], &bal[0][i]);
		
		pref[0][i] = pref[0][i - 1] + t[0][i];
	}
	for (int i = 1; i <= m; i++){
		
		scanf("%lld%lld%lld", &t[1][i], &s[1][i], &bal[1][i]);
	
		pref[1][i] = pref[1][i - 1] + t[1][i];
	
		int pos = upper_bound( pref[0] + 1, pref[0] + n + 1, s[1][i] - pref[1][i] ) - pref[0] - 1;
		
		if (s[1][i] - pref[1][i] >= 0){
			
			if (vec[1][pos].empty() ) 
				vec[1][pos].pb( mk( i, bal[1][i] ) );
			else
				vec[1][pos].pb( mk( i, vec[1][pos].back().sc + bal[1][i] ) );
		}
	}
	for (int i = 1; i <= n; i++){
	
		int pos = upper_bound( pref[1] + 1, pref[1] + m + 1, s[0][i] - pref[0][i] ) - pref[1] - 1;
		
		if (s[0][i] - pref[0][i] >= 0){
			
			if (vec[0][pos].empty() ) 
				vec[0][pos].pb( mk( i, bal[0][i] ) );
			else
				vec[0][pos].pb( mk( i, vec[0][pos].back().sc + bal[0][i] ) );
		}
	}
	int i = 0, j = 0;
	
	while (i < n || j < m){
		
		if (i == n){
			if (pref[0][n] + pref[1][j + 1] <= s[1][j + 1])
				ans += bal[1][j + 1];
			j++;
			continue;
		}
		if (j == m){
			if (pref[1][m] + pref[0][i + 1] <= s[0][i + 1])
				ans += bal[0][i + 1];
			i++;
			continue;
		}
		long long val1 = 0, val2 = 0;
		
		int pos, t0 = 1, t1 = 1;
		
		if ( i <= m ){
			pos = upper_bound( all(vec[1][i]), mk(j, inf) ) - vec[1][i].begin() - 1;

			if (pos >= 0)
				val1 = -(vec[1][i].back().sc - vec[1][i][pos].sc);
			else if ( !vec[1][i].empty() )
				val1 = -vec[1][i].back().sc;
		}
		if ( j <= n ){
			pos = upper_bound( all(vec[0][j]), mk(i, inf) ) - vec[0][j].begin() - 1;
			
			if (pos >= 0)
				val2 = -(vec[0][j].back().sc - vec[0][j][pos].sc);
			else if ( !vec[0][j].empty() )
				val2 = -vec[0][j].back().sc;
		}
		if (pref[0][i + 1] + pref[1][j] > s[0][i + 1])
			t0 = 0;
		if (pref[1][j + 1] + pref[0][i] > s[1][j + 1])
			t1 = 0;
			
		//cout << i << " " << j << endl;
		//cout << t0 << endl;
		//cout << t1 << endl;
			
		if (val1 > val2){
			ans += bal[0][i + 1] * t0;
			i++;
		}
		else{
			ans += bal[1][j + 1] * t1;
			j++;
		}
	}
	cout << ans << endl;
}
/**
4 3
2 1 1
3 8 1
2 13 1
1 13 1
3 6 1
2 11 1
2 15 1
**/

Compilation message

dishes.cpp:22:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main(){
      ^
dishes.cpp: In function 'int main()':
dishes.cpp:28:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld%lld%lld", &t[0][i], &s[0][i], &bal[0][i]);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dishes.cpp:34:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld%lld%lld", &t[1][i], &s[1][i], &bal[1][i]);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 313 ms 83228 KB Output is correct
2 Incorrect 296 ms 83568 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 47 ms 47352 KB Output is correct
2 Correct 46 ms 47352 KB Output is correct
3 Correct 46 ms 47352 KB Output is correct
4 Correct 47 ms 47356 KB Output is correct
5 Correct 48 ms 47352 KB Output is correct
6 Correct 47 ms 47352 KB Output is correct
7 Incorrect 58 ms 47352 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 47 ms 47352 KB Output is correct
2 Correct 46 ms 47352 KB Output is correct
3 Correct 46 ms 47352 KB Output is correct
4 Correct 47 ms 47356 KB Output is correct
5 Correct 48 ms 47352 KB Output is correct
6 Correct 47 ms 47352 KB Output is correct
7 Incorrect 58 ms 47352 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 47 ms 47352 KB Output is correct
2 Correct 46 ms 47352 KB Output is correct
3 Correct 46 ms 47352 KB Output is correct
4 Correct 47 ms 47356 KB Output is correct
5 Correct 48 ms 47352 KB Output is correct
6 Correct 47 ms 47352 KB Output is correct
7 Incorrect 58 ms 47352 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 47 ms 47352 KB Output is correct
2 Correct 46 ms 47352 KB Output is correct
3 Correct 46 ms 47352 KB Output is correct
4 Correct 47 ms 47356 KB Output is correct
5 Correct 48 ms 47352 KB Output is correct
6 Correct 47 ms 47352 KB Output is correct
7 Incorrect 58 ms 47352 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 47 ms 47352 KB Output is correct
2 Correct 46 ms 47352 KB Output is correct
3 Correct 46 ms 47352 KB Output is correct
4 Correct 47 ms 47356 KB Output is correct
5 Correct 48 ms 47352 KB Output is correct
6 Correct 47 ms 47352 KB Output is correct
7 Incorrect 58 ms 47352 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 313 ms 83228 KB Output is correct
2 Incorrect 296 ms 83568 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 313 ms 83228 KB Output is correct
2 Incorrect 296 ms 83568 KB Output isn't correct
3 Halted 0 ms 0 KB -