#define PROBLEM "https://judge.yosupo.jp/problem/aplusb"
#include"../../geometry/lattice_point_count.hpp"#include<cassert>
#include<cstdint>
#include"../../utilities/fast_io.hpp"
#include<limits>
#include<vector>usingInequality=m1une::geometry::LinearInequality<longlong>;__int128count(conststd::vector<Inequality>&inequalities){returnm1une::geometry::count_lattice_points(inequalities);}voidtest_examples_and_degenerate_regions(){std::vector<Inequality>triangle;triangle.push_back(Inequality{-1,0,0});triangle.push_back(Inequality{0,-1,0});triangle.push_back(Inequality{1,1,2});assert(count(triangle)==6);std::vector<Inequality>point;point.push_back(Inequality{1,0,1});point.push_back(Inequality{-1,0,-1});point.push_back(Inequality{0,1,2});point.push_back(Inequality{0,-1,-2});assert(count(point)==1);std::vector<Inequality>diagonal_segment;diagonal_segment.push_back(Inequality{-1,0,0});diagonal_segment.push_back(Inequality{1,0,2});diagonal_segment.push_back(Inequality{-1,2,0});diagonal_segment.push_back(Inequality{1,-2,0});assert(count(diagonal_segment)==2);std::vector<Inequality>fractional_vertical_segment;fractional_vertical_segment.push_back(Inequality{2,0,1});fractional_vertical_segment.push_back(Inequality{-2,0,-1});fractional_vertical_segment.push_back(Inequality{0,1,10});fractional_vertical_segment.push_back(Inequality{0,-1,10});assert(count(fractional_vertical_segment)==0);std::vector<Inequality>empty;empty.push_back(Inequality{1,0,0});empty.push_back(Inequality{-1,0,-1});empty.push_back(Inequality{0,1,2});empty.push_back(Inequality{0,-1,2});assert(count(empty)==0);std::vector<Inequality>contradiction=triangle;contradiction.push_back(Inequality{0,0,-1});assert(count(contradiction)==0);}voidtest_large_coordinates_and_floor_sum(){constexprlonglongsize=1000000000000LL;std::vector<Inequality>square;square.push_back(Inequality{-1,0,0});square.push_back(Inequality{1,0,size-1});square.push_back(Inequality{0,-1,0});square.push_back(Inequality{0,1,size-1});assert(count(square)==__int128(size)*size);constexprlonglongmaximum=std::numeric_limits<longlong>::max();std::vector<Inequality>long_segment;long_segment.push_back(Inequality{1,0,maximum});long_segment.push_back(Inequality{-1,0,maximum});long_segment.push_back(Inequality{0,maximum,0});long_segment.push_back(Inequality{0,-maximum,0});assert(count(long_segment)==__int128(2)*maximum+1);std::vector<Inequality>rational_triangle;rational_triangle.push_back(Inequality{-1,0,0});rational_triangle.push_back(Inequality{1,0,size});rational_triangle.push_back(Inequality{0,-1,0});rational_triangle.push_back(Inequality{2,3,3*size});__int128expected=0;for(longlongx=0;x<=1000;++x){expected+=(3*1000-2*x)/3+1;}std::vector<Inequality>small_triangle;small_triangle.push_back(Inequality{-1,0,0});small_triangle.push_back(Inequality{1,0,1000});small_triangle.push_back(Inequality{0,-1,0});small_triangle.push_back(Inequality{2,3,3000});assert(count(small_triangle)==expected);assert(count(rational_triangle)>0);}boolsatisfies(constInequality&inequality,longlongx,longlongy){return__int128(inequality.a)*x+__int128(inequality.b)*y<=inequality.c;}voidtest_randomized_against_naive(){std::uint64_tstate=0x243f6a8885a308d3ULL;autorandom=[&state](){state^=state<<7;state^=state>>9;returnstate;};for(inttest=0;test<4000;++test){longlongbound=1+static_cast<longlong>(random()%8);std::vector<Inequality>inequalities;inequalities.push_back(Inequality{1,0,bound});inequalities.push_back(Inequality{-1,0,bound});inequalities.push_back(Inequality{0,1,bound});inequalities.push_back(Inequality{0,-1,bound});intextra=static_cast<int>(random()%15);for(intindex=0;index<extra;++index){longlonga=static_cast<longlong>(random()%11)-5;longlongb=static_cast<longlong>(random()%11)-5;longlongc=static_cast<longlong>(random()%31)-15;inequalities.push_back(Inequality{a,b,c});}longlongexpected=0;for(longlongx=-bound;x<=bound;++x){for(longlongy=-bound;y<=bound;++y){boolvalid=true;for(constInequality&inequality:inequalities){if(!satisfies(inequality,x,y)){valid=false;break;}}expected+=valid;}}assert(count(inequalities)==expected);}}intmain(){m1une::utilities::FastInputfast_input;m1une::utilities::FastOutputfast_output;test_examples_and_degenerate_regions();test_large_coordinates_and_floor_sum();test_randomized_against_naive();longlonga,b;fast_input>>a>>b;fast_output<<a+b<<'\n';}
Traceback(mostrecentcalllast):File"/home/runner/.local/lib/python3.12/site-packages/onlinejudge_verify/documentation/build.py",line71,in_render_source_code_statbundled_code=language.bundle(stat.path,basedir=basedir,options={'include_paths':[basedir]}).decode()^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File"/home/runner/.local/lib/python3.12/site-packages/onlinejudge_verify/languages/cplusplus.py",line187,inbundlebundler.update(path)File"/home/runner/.local/lib/python3.12/site-packages/onlinejudge_verify/languages/cplusplus_bundle.py",line401,inupdateself.update(self._resolve(pathlib.Path(included),included_from=path))File"/home/runner/.local/lib/python3.12/site-packages/onlinejudge_verify/languages/cplusplus_bundle.py",line400,inupdateraiseBundleErrorAt(path,i+1,"unable to process #include in #if / #ifdef / #ifndef other than include guards")onlinejudge_verify.languages.cplusplus_bundle.BundleErrorAt:geometry/lattice_point_count.hpp:line28:unabletoprocess#includein#if/#ifdef/#ifndefotherthanincludeguards