| 比赛 |
NOIP2025模拟赛4 |
评测结果 |
AAAAAAAAAAAAAAAA |
| 题目名称 |
Lunch Concert |
最终得分 |
100 |
| 用户昵称 |
梦那边的美好TE |
运行时间 |
2.136 s |
| 代码语言 |
C++ |
内存使用 |
6.19 MiB |
| 提交时间 |
2025-11-27 09:16:16 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int N=2e5+10;
const double eps=1e-5;
long long n,p[N],w[N],d[N];
long long ans=1e18;
double f(double x){
double res=0;
for(int i=1;i<=n;i++){
if(p[i]<=x&&p[i]+d[i]<=x){
res+=(x-p[i]-d[i])*1.0*w[i];
}
if(p[i]>=x&&p[i]-d[i]>=x){
res+=(p[i]-d[i]-x)*1.0*w[i];
}
}
return res;
}
long long calc(long long x){
long long res=0;
for(int i=1;i<=n;i++){
if(p[i]<=x&&p[i]+d[i]<=x){
res+=(x-p[i]-d[i])*w[i];
}
if(p[i]>=x&&p[i]-d[i]>=x){
res+=(p[i]-d[i]-x)*w[i];
}
}
return res;
}
int main(){
freopen("Concert.in","r",stdin);
freopen("Concert.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld %lld %lld",p+i,w+i,d+i);
}
double l=-1e9,r=2e9;
for(int i=0;i<=50;i++){
double mid=(r-l)/3;
double lmid=l+mid;
double rmid=r-mid;
if(f(lmid)>f(rmid)){
l=lmid;
}else {
r=rmid;
}
}
long long L=floor(l),R=ceil(r);
for(long long i=L;i<=R;i++){
ans=min(ans,calc(i));
}
printf("%lld\n",ans);
return 0;
}