QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#680565 | #9529. Farm Management | ucup-team4810# | TL | 1ms | 5752kb | C++14 | 2.7kb | 2024-10-26 21:34:03 | 2024-10-26 21:34:03 |
Judging History
answer
#include<bits/stdc++.h>
namespace my_std{
using namespace std;
#define pii pair<int,int>
#define fir first
#define sec second
#define MP make_pair
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define drep(i,x,y) for (int i=(x);i>=(y);i--)
#define go(x) for (int i=head[x];i;i=edge[i].nxt)
#define templ template<typename T>
#define sz 303030
typedef long long ll;
typedef double db;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
templ inline T rnd(T l,T r) {return uniform_int_distribution<T>(l,r)(rng);}
templ inline bool chkmax(T &x,T y){return x<y?x=y,1:0;}
templ inline bool chkmin(T &x,T y){return x>y?x=y,1:0;}
templ inline void read(T& t) {
t=0;char f=0,ch=getchar();double d=0.1;
while(ch>'9'||ch<'0') f|=(ch=='-'),ch=getchar();
while(ch<='9'&&ch>='0') t=t*10+ch-48,ch=getchar();
if(ch=='.'){ch=getchar();while(ch<='9'&&ch>='0') t+=d*(ch^48),d*=0.1,ch=getchar();}
t=(f?-t:t);
}
template<typename T,typename... Args>inline void read(T& t,Args&... args){read(t); read(args...);}
void file() {
#ifdef zqj
freopen("a.in","r",stdin);
#endif
}
inline void chktime() {
#ifdef zqj
cerr<<clock()/1000.0<<'\n';
#endif
}
#ifdef mod
ll ksm(ll x,int y){ll ret=1;for (;y;y>>=1,x=x*x%mod) if (y&1) ret=ret*x%mod;return ret;}
ll inv(ll x){return ksm(x,mod-2);}
#else
ll ksm(ll x,int y){ll ret=1;for (;y;y>>=1,x=x*x) if (y&1) ret=ret*x;return ret;}
#endif
}
using namespace my_std;
int n,m;
struct hh {
ll w,l,t;
bool operator < (const hh& b) const {
return w<b.w;
}
}a[sz];
int main() {
file();
ios::sync_with_stdio(false), cin.tie(0);
cin>>n>>m;
rep(i,1,n) cin>>a[i].w>>a[i].l>>a[i].t, a[i].t-=a[i].l;
sort(a+1,a+n+1);
static ll suft[sz],sufw[sz];
drep(i,n,1) suft[i]=suft[i+1]+a[i].t,sufw[i]=sufw[i+1]+a[i].w*a[i].t;
ll totl=0,totlw=0;
rep(i,1,n) totl+=a[i].l,totlw+=a[i].l*a[i].w;
ll ans=0;
rep(i,1,n) {
ll _totl=totl-a[i].l,_totlw=totlw-a[i].l*a[i].w;
if (_totl+suft[i+1]<=m) {
chkmax(ans,_totlw+sufw[i+1]+a[i].w*(m-_totl-suft[i+1]));
}
else {
int L=i+1,R=n,pos=-1;
while (L<=R) {
int mid=(L+R)>>1;
if (_totl+suft[mid+1]<=m) pos=mid,R=mid-1;
else R=mid+1;
}
assert(pos!=-1);
chkmax(ans,_totlw+sufw[pos+1]+a[pos].w*(m-_totl-suft[pos+1]));
}
}
cout<<ans<<'\n';
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 5752kb
input:
5 17 2 3 4 6 1 5 8 2 4 4 3 3 7 5 5
output:
109
result:
ok single line: '109'
Test #2:
score: -100
Time Limit Exceeded
input:
12 62 503792 9 10 607358 1 3 600501 10 10 33249 4 4 774438 6 6 197692 3 6 495807 8 8 790225 5 9 77272 3 8 494819 4 9 894779 3 9 306279 5 6