Codeforces Round #516 (Div. 1, by Moscow Team Olympiad) D
阿新 • • 發佈:2018-11-11
題鏈
Description
解一個線性規劃(大霧)
Sol
單純形我們發現我們可以暴力列舉轉的圈數,而這個東西可以數論分塊優化。
Code
#include <bits/stdc++.h> #define LL long long using namespace std; LL n,x,k,lb,ub,l,r,ans=-1; int main() { scanf("%lld%lld%lld%lld",&n,&l,&r,&k); x=(r>=l?r-l+1:r+n-l+1)%n; for(LL i=k,j,r;i;i=j){ j=k/(k/i+1);r=k/i; ub=min(2*n,i); lb=max(n,j+1); ub=min(ub,min((2*n+k-2*x+1)/(r+1),(k-x)/r)); lb=max(lb,(k-2*x+r-1)/r); if(ub>=lb)ans=max(ans,ub); } if(x<=k&&k<=x*2)ans=max(ans,n+min(k-x,x-1)+n-x+1); if(!x&&k==n)ans=max(ans,n+1); printf("%lld\n",~ans?ans-n:ans); }