Submission #91050

#TimeUsernameProblemLanguageResultExecution timeMemory
91050YottaByteDivide and conquer (IZhO14_divide)C++14
48 / 100
1071 ms3348 KiB
#include <stdio.h>
using namespace std;

const int N = 1e5 + 1;

#define ll long long
#define int long long
#define ok puts("OK");
int n, x[N], g[N], e[N];

inline bool check(ll mid)
{
	int l = 1, r = 1;
	
	ll genergy = e[l];
	ll lenergy = 0;
	ll ggold = g[l];
	for(int i = 1; i <= n; i++)
	{
		ggold = 0;
		lenergy = 0;
		genergy = 0;
		for(int j = i; j <= n; j++)
		{
			lenergy = x[j] - x[i];
			ggold += g[j];
			genergy += e[j];
			if(genergy >= lenergy && ggold >= mid) return true;
		}
	}
	return false;
}

main()
{
	ll maxg = 0;
	scanf("%lld", &n);
	for(int i = 1; i <= n; i++)
		scanf("%lld %lld %lld", &x[i], &g[i], &e[i]), maxg += g[i];
	
	ll l = 0, r = maxg + 1;
	while(r - l > 1)
	{
		ll mid = l + r >> 1ll;
		if(check(mid)) l = mid;
		else r = mid;
		//puts("");
	}
	
	printf("%lld", l);
}
/*
4
0 5 1
1 7 2
4 4 1
7 15 1

2
0 4 1
3 5 1

4
0 5 1
1 2 0
2 2 0
3 7 7
*/

	//while(l <= r)
	//{
		//lenergy = x[r] - x[l];
		////printf("Gold: %lld NeedG: %lld EnergyL: %lld EnergyG: %lld L: %d R: %d",
		              ////ggold,       mid,        lenergy,      genergy,  l,    r);
		////puts("");
		//if(lenergy <= genergy && ggold >= mid)
			//return true;
		
		//if(l == n && r == n)
			//return false;
		//if(lenergy <= genergy && r < n)
		//{
			//r++;
			//ggold += g[r];
			//genergy += e[r];
		//}
		//else
		//{
			//ggold -= g[l];
			//genergy -= e[l];
			//l++;
		//}
	//}

Compilation message (stderr)

divide.cpp: In function 'bool check(long long int)':
divide.cpp:13:13: warning: unused variable 'r' [-Wunused-variable]
  int l = 1, r = 1;
             ^
divide.cpp: At global scope:
divide.cpp:34:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main()
      ^
divide.cpp: In function 'int main()':
divide.cpp:44:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   ll mid = l + r >> 1ll;
            ~~^~~
divide.cpp:37:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld", &n);
  ~~~~~^~~~~~~~~~~~
divide.cpp:39:47: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld %lld %lld", &x[i], &g[i], &e[i]), maxg += g[i];
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...