답안 #30618

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
30618 2017-07-25T12:46:24 Z samir_droubi Aliens (IOI16_aliens) C++14
0 / 100
0 ms 2028 KB
#include "aliens.h"
#include <bits/stdc++.h>
#define pii pair<int,int>
#define ll long long
using namespace std;
bool cmp(pii x , pii y)
{
	if(x.first == y.first)return x.second > y.second;
	return x.first < y.first;
}
struct CHT{
	vector<ll>m;
	vector<ll>p;
	int it=0;
	bool check()
	{
		if(m.size() < 3)return false;
		int l1 = m.size() - 3;
		int l2 = m.size() - 2;
		int l3 = m.size() - 1;
		return double(p[l3] - p[l1]) * (m[l1] - m[l2]) < double(p[l2] - p[l1]) * (m[l1] - m[l3]);
	}
	void add(ll M,ll P)
	{
		m.push_back(M);
		p.push_back(P);
		while(check())
		{
			m.erase(m.end() - 2);
			p.erase(p.end() - 2);
		}
	}
	ll calc(ll x,int i)
	{
		return x * m[i] + p[i];
	}
	ll query(ll x)
	{
		if(it >= m.size() )it = m.size() - 1;
		while(it < m.size() - 1 && calc(x , it) >= calc(x , it + 1 ) ){
			++it;
		}
		return calc(x , it);
	}
}ds[105];
long long take_photos(int n, int m, int k, std::vector<int> r, std::vector<int> c) {
   	vector<pii>tmp;
   	vector<pii>v;
   	for(int i = 0 ; i < n ; ++i)
   		tmp.push_back( { min( r[i], c[i] ) , max( r[i] , c[i] ) } );
   	sort( tmp.begin() , tmp.end() , cmp );

   	int last = -1;
   	for(int i = 0 ; i < n ; ++i)
   	{
   		if(tmp[i].second <= last)continue;
   		v.push_back( tmp[i] );
   		last = max(last , tmp[i].second);
   	}

   	ll ans = (1LL <<61);

   	for(int i= 0 ; i <= k; ++i)
   		ds[i].add(-2 * (v[0].first - 1) , (v[0].first - 1) * (v[0].first - 1) );

   	n = v.size();
   	for(int i = 0 ; i < n ; ++i)
   	{
   		ll l = v[i].first;
   		ll r = v[i].second;
   		for(int j = k ;  j >= 1 ; --j)
   		{
   			ll dp = ds[j - 1].query(r) +  r * r;
   			if(i == n - 1)ans = min(ans , dp);

   			if(i < n - 1)
   			{
   				ll L = v[i + 1].first;
   				ll mx = max(0LL , r - L + 1);
				ds[j].add( -2 * (L - 1) , (L - 1) * (L - 1) + dp + mx * mx );
   			}
   		}
   	}
   	return ans;
}

Compilation message

aliens.cpp: In member function 'long long int CHT::query(long long int)':
aliens.cpp:39:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(it >= m.size() )it = m.size() - 1;
         ^
aliens.cpp:40:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(it < m.size() - 1 && calc(x , it) >= calc(x , it + 1 ) ){
            ^
aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:69:9: warning: unused variable 'l' [-Wunused-variable]
      ll l = v[i].first;
         ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2028 KB Correct answer: answer = 4
2 Correct 0 ms 2028 KB Correct answer: answer = 4
3 Correct 0 ms 2028 KB Correct answer: answer = 4
4 Incorrect 0 ms 2028 KB Wrong answer: output = 14, expected = 12
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2028 KB Correct answer: answer = 1
2 Correct 0 ms 2028 KB Correct answer: answer = 4
3 Correct 0 ms 2028 KB Correct answer: answer = 1
4 Correct 0 ms 2028 KB Correct answer: answer = 5
5 Correct 0 ms 2028 KB Correct answer: answer = 41
6 Correct 0 ms 2028 KB Correct answer: answer = 71923
7 Correct 0 ms 2028 KB Correct answer: answer = 77137
8 Runtime error 0 ms 2028 KB Execution killed with signal 11 (could be triggered by violating memory limits)
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2028 KB Correct answer: answer = 4
2 Correct 0 ms 2028 KB Correct answer: answer = 4
3 Correct 0 ms 2028 KB Correct answer: answer = 4
4 Incorrect 0 ms 2028 KB Wrong answer: output = 14, expected = 12
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2028 KB Correct answer: answer = 4
2 Correct 0 ms 2028 KB Correct answer: answer = 4
3 Correct 0 ms 2028 KB Correct answer: answer = 4
4 Incorrect 0 ms 2028 KB Wrong answer: output = 14, expected = 12
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2028 KB Correct answer: answer = 4
2 Correct 0 ms 2028 KB Correct answer: answer = 4
3 Correct 0 ms 2028 KB Correct answer: answer = 4
4 Incorrect 0 ms 2028 KB Wrong answer: output = 14, expected = 12
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2028 KB Correct answer: answer = 4
2 Correct 0 ms 2028 KB Correct answer: answer = 4
3 Correct 0 ms 2028 KB Correct answer: answer = 4
4 Incorrect 0 ms 2028 KB Wrong answer: output = 14, expected = 12
5 Halted 0 ms 0 KB -