Submission #939052

# Submission time Handle Problem Language Result Execution time Memory
939052 2024-03-06T04:33:42 Z vjudge1 Building Bridges (CEOI17_building) C++17
30 / 100
3000 ms 10768 KB
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
//using namespace __gnu_pbds;
 
bool YES(bool f){ if(f) cout << "Yes\n" ; else cout << "No\n" ; return f ; }
void YES(){YES(1);}
void NO(){YES(0);}
void fopn(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
//#define ordered_set tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update>
#define ios ios_base::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0);
#define int long long
#define ld long double
#define pii pair <int , int>
#define all(x) x.begin() , x.end()
#define ff first
#define ss second
#define endl '\n'
 
const int N = 1e6 + 5 ;
const int inf = 1e16 ;
const int mod = 1e9 + 8 ;
const double eps = 1e-8 ;
 
template <class T>
bool chmax( T& x , const T& y ){
  bool f = 0 ;
  if ( x < y ) x = y , f = 1 ;
  return f ;
}
template <class T>
bool chmin( T &x , const T &y ){
  bool f = 0 ;
  if ( x > y ) x = y , f = 1 ;
  return f ;
}
 
//code
 
int n ;
int a[N] , b[N] , pref[N] , dp[N] ;

struct line{
	int m , c ;
	line ( int a , int b ){
		m = a , c = b ;
	}
};

struct cht{
	vector <line> v ;
	void init( int x ){
		v.clear() ;
	}
	
	bool bad ( line l1 , line l2 , line l3 ){
		int f = (l2.c-l1.c)*(l2.m-l3.m) ;
		int s = (l3.c-l2.c)*(l1.m-l2.m) ;
		return f >= s ;
	}
	
	void add ( line a ){
		v.push_back(a) ;
		int sz = v.size() ;
		while ( sz > 2  && bad( v[sz-3] , v[sz-2] , v[sz-1] ) ){
			v.erase(v.end()-2) ; sz -- ;
		}
	}
	
	int val ( int ind , int x ){
		return v[ind].m*x + v[ind].c ;
	}
	
	int get ( int x ){
		int l = 0 , r = v.size()-1 , ans ;
		while ( l <= r ){
			int m1 = l+(r-l)/3 , m2 = r-(r-l)/3 ;
			if ( val(m1,x) <= val(m2,x) ) r = m2-1 , ans = val(m1,x) ;
			else l = m1+1 , ans = val(m2,x) ;
		}
		
		return ans ;
	}
	
};

void solve(){
	
	cin >> n ;
	for ( int i = 0 ; i < n ; i ++ ) cin >> a[i] ;
	for ( int i = 0 ; i < n ; i ++ ) cin >> b[i] ;
	pref[0] = a[0] ;
	for ( int i = 1 ; i < n ; i ++ ) pref[i] = pref[i-1] + b[i] ;
	for ( int i = 1 ; i < n ; i ++ ){
		dp[i] = inf ;
		for ( int j = 0 ; j < i ; j ++ ) chmin ( dp[i] , dp[j]+(a[j]-a[i])*(a[j]-a[i])+pref[i-1]-pref[j] ) ;
		//cout << dp[i] << ' ' ;
	}
	cout << dp[n-1] ;
}

signed main(){
    ios ;
	int t = 1 ;
	//cin >> t ;
	while ( t -- ) solve() ;
}

Compilation message

building.cpp: In function 'void fopn(std::string)':
building.cpp:10:31: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 | void fopn(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
      |                        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
building.cpp:10:72: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 | void fopn(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
      |                                                                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Correct 3 ms 6492 KB Output is correct
5 Correct 2 ms 6492 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 3042 ms 10768 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Correct 3 ms 6492 KB Output is correct
5 Correct 2 ms 6492 KB Output is correct
6 Execution timed out 3042 ms 10768 KB Time limit exceeded
7 Halted 0 ms 0 KB -