제출 #397418

#제출 시각아이디문제언어결과실행 시간메모리
397418Nicholas_PatrickBuilding Bridges (CEOI17_building)C++17
30 / 100
3058 ms4392 KiB
#include <cstdio>
#include <queue>
using namespace std;

struct line{
	long long m, c;
	line(long long m, long long c):m(m), c(c){}
	long long eval(long long x){
		return m*x+c;
	}
};
int main(){
	int n;
	scanf("%d", &n);
	vector<int> h(n), w(n);
	for(int& i: h)
		scanf("%d", &i);
	long long sumw=0;
	for(int& i: w){
		scanf("%d", &i);
		sumw+=i;
		i=-i;
	}
	vector<line> ch;
	ch.emplace_back(-2*h[0], (long long)h[0]*h[0]+w[0]);
	for(int i=1; i+1<n; i++){
		long long cost=1e18;
		for(auto& j: ch)
			cost=min(cost, j.eval(h[i]));
		cost+=(long long)h[i]*h[i]+w[i];
		ch.emplace_back(-2*h[i], (long long)h[i]*h[i]+cost);
	}
	long long ans=1e18;
	for(auto& j: ch)
		ans=min(ans, j.eval(h[n-1]));
	ans+=(long long)h[n-1]*h[n-1]+w[n-1]+sumw;
	printf("%lld\n", ans);
}

컴파일 시 표준 에러 (stderr) 메시지

building.cpp: In function 'int main()':
building.cpp:14:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   14 |  scanf("%d", &n);
      |  ~~~~~^~~~~~~~~~
building.cpp:17:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   17 |   scanf("%d", &i);
      |   ~~~~~^~~~~~~~~~
building.cpp:20:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   20 |   scanf("%d", &i);
      |   ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...