Submission #2665575


Source Code Expand

#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<numeric>
#include<limits>
#include<bitset>
#include<functional>
#include<type_traits>
#include<queue>
#include<stack>
#include<array>
#include<random>
#include<utility>

#include<boost/multi_array.hpp>
#include<boost/variant.hpp>
#include<boost/optional.hpp>
#include<boost/optional/optional_io.hpp>
#include<boost/range/irange.hpp>
#include<boost/range/algorithm.hpp>
#include<boost/range/adaptors.hpp>
#include<boost/range/size.hpp>
#include<boost/multiprecision/cpp_int.hpp>

#include<cstdlib>
#include<ctime>

#define FOREACH_STRUCT2(arg0,arg1,rng)\
for(auto const& p:rng)\
for(bool f = true;f;)\
for(auto const& arg0=std::get<0>(p); f;)\
for(auto const& arg1=std::get<1>(p); f; f=false)

#define FOREACH_STRUCT3(arg0, arg1, arg2, rng)\
for(auto const& p:rng)\
for(bool f=true;f;)\
for(auto const& arg0=std::get<0>(p);f;)\
for(auto const& arg1=std::get<1>(p);f;)\
for(auto const& arg2=std::get<2>(p);f;f=false)

#define DEFINE_STRUCT2(arg0, arg1, stc)\
auto const& arg0=std::get<0>(stc);\
auto const& arg1=std::get<1>(stc)

#define DEFINE_STRUCT3(arg0, arg1, arg2, stc)\
DEFINE_STRUCT2(arg0, arg1, stc);\
auto const& arg2=std::get<2>(stc)

#define DUAL_REP(arg0,arg1, fmax, smax)\
for(int arg0:boost::irange<int>(0,fmax))\
for(int arg1:boost::irange<int>(0,smax))
#define TRIPLE_REP(arg0,arg1,arg2,fmax,smax,tmax)\
DUAL_REP(arg0,arg1,fmax,smax)\
for(int arg2:boost::irange<int>(0,tmax))

namespace lib
{
	using namespace boost::range;
	template<class T>constexpr T pow(T base, std::size_t p)
	{
		if (p == 0)
		{
			return T(1);
		}
		else if (p == 1)
		{
			return base;
		}
		else if (p == 2)
		{
			return base * base;
		}
		else if (p % 2 == 0)
		{
			return pow(pow(base, p / 2), 2);
		}
		else
		{
			return pow(pow(base, p / 2), 2)*base;
		}
	}

	template<class T>constexpr T gcd(T a, T b)
	{
		return a > b ? gcd(b, a) : a == T() ? b : gcd(b%a, a);
	}

	constexpr int intlog2(std::int64_t x)
	{
		std::int64_t j = 2;
		for (auto i = 0; i < 63; ++i)
		{
			if (j > x)
			{
				return int(i);
			}
			j <<= 1;
		}
		return 63;
	}

	template<class T>using p_queue = std::priority_queue<T, std::vector<T>, std::greater<>>;

	struct union_find_light
	{
		std::vector<int> upper;
		union_find_light(std::size_t size):upper(size, -1) {}

		int group(int index)
		{
			if (upper[index] == -1)
			{
				return index;
			}
			else
			{
				auto ret = group(upper[index]);
				upper[index] = ret;
				return ret;
			}
		}

		bool merge(int x, int y)
		{
			auto gx = group(x);
			auto gy = group(y);
			if (gx != gy)
			{
				upper[gx] = gy;
				return true;
			}
			return false;
		}

		auto get()
		{
			std::map<int, std::set<int>> ret;
			for (int i = 0; i < upper.size(); ++i)
			{
				ret[group(i)].emplace(i);
			}
			return ret;
		}

		auto tops()
		{
			std::set<int> ret;
			for (int i = 0; i < upper.size(); ++i)
			{
				ret.emplace(group(i));
			}
			return ret;
		}

		bool is_same_group(int x, int y)
		{
			return group(x) == group(y);
		}
	};

	template<class Selector>auto make_compare(Selector selector)
	{
		return [=](auto const& lhs, auto const& rhs) {return selector(lhs) < selector(rhs); };
	}

	template<class Iterator>auto make_range(Iterator first, Iterator last)
	{
		struct return_type
		{
			Iterator first;
			Iterator last;
			auto begin()const
			{
				return first;
			}
			auto end()const
			{
				return last;
			}
		};
		return return_type{ first, last };
	}

	template<class T>auto factorial_array(std::size_t max)
	{
		std::vector<T> ret(max + 1);
		ret[0] = 1;
		for (auto i : boost::irange<std::size_t>(1, max + 1))
		{
			ret[i] = ret[i - 1] * T(i);
		}
		return ret;
	}

	auto const first = [](auto p) {return p.first; };
	auto const second = [](auto p) {return p.second; };

	auto maxf = [](auto a, auto b) {return std::max(a, b); };
	auto minf = [](auto a, auto b) {return std::min(a, b); };

	template<class T>using dual_array = boost::multi_array<T, 2>;
	template<class T>using optional_dual_array = boost::multi_array<boost::optional<T>, 2>;
	namespace detail
	{
		template<class T>struct graph_t
		{
			typedef std::vector<std::map<int, T>> type;
		};
		template<>struct graph_t<void>
		{
			typedef std::vector<std::set<int>> type;
		};
	}
	template<class T = void>using graph = typename detail::graph_t<T>::type;
	template<class T>constexpr T min_value = std::numeric_limits<T>::min();
	template<class T>constexpr T max_value = std::numeric_limits<T>::max();
}

namespace out
{
	namespace detail
	{
		template<class>struct void_out
		{
			typedef void type;
		};
		template<class T>auto write(std::ostream& ost, T const& val)
			->typename void_out<decltype(ost << val)>::type
		{
			ost << val;
		}
		template<class T, class... Ts>void write(std::ostream& ost, T const& val, Ts const&... nexts)
		{
			write(ost, val);
			ost << " ";
			write(ost, nexts...);
		}
		template<class T, std::size_t... Is>void write_tuple(std::ostream& ost, T const& tuple, std::index_sequence<Is...>)
		{
			write(ost, std::get<Is>(tuple)...);
		}
		template<class... Ts>void write(std::ostream& ost, std::tuple<Ts...>const& tuple)
		{
			write_tuple(ost, tuple, std::make_index_sequence<sizeof...(Ts)>());
		}
		template<class T0, class T1>void write(std::ostream& ost, std::pair<T0, T1>const& pair)
		{
			write(ost, pair.first, pair.second);
		}
		template<class T>void write(std::ostream& ost, boost::optional<T>const& opt)
		{
			if (opt)
			{
				write(ost, *opt);
			}
			else
			{
				write(ost, "--");
			}
		}
		template<class T>void write(std::ostream& ost, std::vector<T>const& vec)
		{
			auto size = vec.size();
			if (size == 0)
			{
				return;
			}
			write(ost, vec[0]);
			for (auto i : boost::irange<std::size_t>(1, size))
			{
				ost << " ";
				write(ost, vec[i]);
			}
		}
		template<class T>void write(std::ostream& ost,lib::dual_array<T> const& ar)
		{
			auto a = ar.shape()[0];
			auto b = ar.shape()[1];
			write(ost, ar[0][0]);
			for (auto i : boost::irange<std::size_t>(1, b))
			{
				write(ost, " ", ar[0][i]);
			}
			for (auto i : boost::irange<std::size_t>(1, a))
			{
				ost << std::endl;
				write(ost, ar[i][0]);
				for (auto j : boost::irange<std::size_t>(1, b))
				{
					write(ost, " ", ar[i][j]);
				}
			}
		}
	}
	void write_line()
	{
		std::cout << std::endl;
	}
	template<class...Ts>void write_line(Ts const&... args)
	{
		detail::write(std::cout, args...);
		std::cout << std::endl;
	}
	void debug()
	{
		std::cerr << std::endl;
	}
	template<class...Ts>void debug(Ts const&... args)
	{
		detail::write(std::cerr, args...);
		std::cerr << std::endl;
	}
	template<class Range>void write_range(Range const& rng)
	{
		for (auto const& v : rng)
		{
			write_line(v);
		}
	}
	template<class Range>void debug_range(Range const& rng)
	{
		for (auto const& v : rng)
		{
			debug(v);
		}
	}
}

namespace adaptor = boost::adaptors;

typedef std::pair<std::int64_t, std::int64_t> int64pair;

void Main()
{
	int N;
	std::cin >> N;
	std::vector<std::pair<std::int64_t, bool>> vec(2 * N);
	for (int i : boost::irange(0, N))
	{
		std::int64_t x, y;
		std::cin >> x >> y;
		vec[2 * i] = std::make_pair(std::min(x, y), false);
		vec[2 * i + 1] = std::make_pair(std::max(x, y), true);
	}
	lib::sort(vec);

	std::int64_t a, b;
	for (int i : boost::irange(1, 2 * N))
	{
		if (vec[i].second)
		{
			a = vec[i].first;
			break;
		}
	}
	for (int i = 2 * N - 2; i >= 1; --i)
	{
		if (!vec[i].second)
		{
			b = vec[i].first;
			break;
		}
	}
	auto min = lib::max_value<std::int64_t>;
	if ((vec.back().first - vec.front().first)*(b - a) > 0)
	{
		min = std::min(min, (vec.back().first - vec.front().first)*(b - a));
	}
	if ((vec.back().first - a)*(b - vec.front().first) > 0)
	{
		min = std::min(min, (vec.back().first - a)*(b - vec.front().first));
	}
	out::write_line(min);
}

int main()
{
	std::cin.tie(nullptr);
	std::cin.sync_with_stdio(false);
	std::cout << std::fixed;
	Main();
}

Submission Info

Submission Time
Task E - Ball Coloring
User plasmaeffect
Language C++14 (GCC 5.4.1)
Score 0
Code Size 8321 Byte
Status WA
Exec Time 73 ms
Memory 6528 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 700
Status
AC × 3
AC × 18
WA × 17
Set Name Test Cases
Sample example0, example1, example2
All div20, div21, div22, div23, div24, example0, example1, example2, maxrand0, maxrand1, maxrand2, maxrand20, maxrand21, maxrand210, maxrand211, maxrand22, maxrand23, maxrand24, maxrand25, maxrand26, maxrand27, maxrand28, maxrand29, maxrand3, maxrand4, smallrand0, smallrand1, smallrand2, smallrand3, smallrand4, sparse0, sparse1, sparse2, sparse3, sparse4
Case Name Status Exec Time Memory
div20 AC 72 ms 6528 KB
div21 AC 72 ms 6528 KB
div22 WA 73 ms 6528 KB
div23 WA 72 ms 6528 KB
div24 WA 72 ms 6528 KB
example0 AC 1 ms 256 KB
example1 AC 1 ms 256 KB
example2 AC 1 ms 256 KB
maxrand0 WA 72 ms 6528 KB
maxrand1 AC 72 ms 6528 KB
maxrand2 WA 73 ms 6528 KB
maxrand20 AC 68 ms 6528 KB
maxrand21 AC 68 ms 6528 KB
maxrand210 WA 63 ms 6528 KB
maxrand211 AC 68 ms 6528 KB
maxrand22 AC 68 ms 6528 KB
maxrand23 AC 71 ms 6528 KB
maxrand24 AC 73 ms 6528 KB
maxrand25 AC 66 ms 6528 KB
maxrand26 AC 66 ms 6528 KB
maxrand27 AC 71 ms 6528 KB
maxrand28 AC 73 ms 6528 KB
maxrand29 WA 73 ms 6528 KB
maxrand3 WA 73 ms 6528 KB
maxrand4 WA 73 ms 6528 KB
smallrand0 WA 1 ms 256 KB
smallrand1 AC 1 ms 256 KB
smallrand2 WA 1 ms 256 KB
smallrand3 AC 1 ms 256 KB
smallrand4 WA 1 ms 256 KB
sparse0 WA 65 ms 6528 KB
sparse1 WA 64 ms 6528 KB
sparse2 WA 64 ms 6528 KB
sparse3 WA 63 ms 6528 KB
sparse4 WA 65 ms 6528 KB