結果
問題 | No.1715 Dinner 2 |
ユーザー |
![]() |
提出日時 | 2021-10-22 23:49:31 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 13 ms / 2,000 ms |
コード長 | 3,926 bytes |
コンパイル時間 | 1,650 ms |
コンパイル使用メモリ | 176,168 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-24 07:04:00 |
合計ジャッジ時間 | 2,777 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 38 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define ll long long#define rep(i,n) for(int i=0;i<n;i++)#define Pr pair<ll,ll>#define Tp tuple<int,int,int>#define all(v) v.begin(),v.end()#define riano_ std::ios::sync_with_stdio(false);std::cin.tie(nullptr)using Graph = vector<vector<ll>>;const ll mod = 8e18;template<uint64_t mod>struct modint{uint64_t val;constexpr modint(const int64_t val_=0) noexcept:val((val_%int64_t(mod)+int64_t(mod))%int64_t(mod)){}constexpr modint operator-() const noexcept{return modint(*this)=mod-val;}constexpr modint operator+(const modint rhs) const noexcept{return modint(*this)+=rhs;}constexpr modint operator-(const modint rhs) const noexcept{return modint(*this)-=rhs;}constexpr modint operator*(const modint rhs) const noexcept{return modint(*this)*=rhs;}constexpr modint operator/(const modint rhs) const noexcept{return modint(*this)/=rhs;}constexpr modint &operator+=(const modint rhs) noexcept{val+=rhs.val;val-=((val>=mod)?mod:0);return (*this);}constexpr modint &operator-=(const modint rhs) noexcept{val+=((val<rhs.val)?mod:0);val-=rhs.val;return (*this);}constexpr modint &operator*=(const modint rhs) noexcept{val=val*rhs.val%mod;return (*this);}constexpr modint &operator/=(modint rhs) noexcept{uint64_t ex=mod-2;modint now=1;while(ex){now*=((ex&1)?rhs:1);rhs*=rhs,ex>>=1;}return (*this)*=now;}modint & operator++(){val++;if (val == mod) val = 0;return *this;}modint operator++(int){modint<mod> res = *this;++*this;return res;}constexpr bool operator==(const modint rhs) noexcept{return val==rhs.val;}constexpr bool operator!=(const modint rhs) noexcept{return val!=rhs.val;}friend constexpr ostream &operator<<(ostream& os,const modint x) noexcept{return os<<(x.val);}friend constexpr istream &operator>>(istream& is,modint& x) noexcept{uint64_t t;is>>t,x=t;return is;}};typedef modint<mod> mint;int main() {riano_; ll ans = -2e18;ll N,D; cin >> N >> D;ll p[N],q[N];vector<Pr> ps;rep(i,N){cin >> p[i] >> q[i];ps.push_back(make_pair(p[i],i));}sort(all(ps));rep(i,N){rep(j,N){if(i==j) continue;if(q[i]-p[i]+q[j]-p[j]<0) continue;ans = max(ans,min((-1)*p[i],q[i]-p[i]-p[j]));}}// if(ans!=-2e18){// cout << ans << endl; return 0;// }bool ok = false;if(ans!=-2e18) ok = true;ll r = (D-1)%2;ll s = (D-1)/2;ll mp = ps[0].first; ll ip = ps[0].second;ll mp2 = ps[1].first; ll ip2 = ps[1].second;rep(i,N){rep(j,N){if(i==j) continue;if(q[i]-p[i]+q[j]-p[j]>0) continue;ll cand = 2e18;ll last = i; ll sec = j;if(r==0){last = j; sec = i;}ll sc = (q[i]-p[i]+q[j]-p[j])*s + (q[i]-p[i])*r;ll alt = ip2; ll rr = ip;if(last!=ip){cand = sc - mp;}else{cand = sc - mp2; alt = ip; rr = ip2;}ll c2 = sc - q[last];ll c3 = 2e18;if(D!=2){c3 = c2 +p[last]-q[sec];}cand = min({cand,c2,c3});if(ok) continue;ans = max(ans,cand);c2 += p[last];c2 -= p[alt];ll c1 = c2+q[alt]-p[rr];cand = max(cand,min({c1,c2,c3}));ans = max(ans,cand);}}cout << ans << endl;}