社区讨论
同一个代码,c环境下45分,c++环境下AC,这是为啥?
P1314[NOIP 2011 提高组] 聪明的质监员参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @loc91b2n
- 此快照首次捕获于
- 2023/10/30 09:56 2 年前
- 此快照最后确认于
- 2023/11/04 21:44 2 年前
CPP
#include<stdio.h>
#include<math.h>
typedef long long ll;
ll n,m,s,r=-1,l,minn=1e13+100;;
ll w[200100],v[200100],sw[200100],sv[200100],li[200100],ri[200100];
int main(){
scanf("%lld%lld%lld",&n,&m,&s);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&w[i],&v[i]);
if(w[i]>r)r=w[i];
}
for(int i=1;i<=m;i++)scanf("%lld%lld",&li[i],&ri[i]);
while(l<=r){
ll ans=0,mid=(l+r)/2,s1;
for(int i=1;i<=n;i++){
if(w[i]>mid)sw[i]=sw[i-1]+1,sv[i]=sv[i-1]+v[i];
else sw[i]=sw[i-1],sv[i]=sv[i-1];
}
for(int i=1;i<=m;i++){
ans+=(sw[ri[i]]-sw[li[i]-1])*(sv[ri[i]]-sv[li[i]-1]);
}
s1=s-ans;
if(s1>0)r=mid-1;
else l=mid+1;
s1=abs(s1);
if(minn>s1)minn=s1;
}
printf("%lld\n",minn);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...