啊,蒟蒻自己做时发现第一个点死活改不了,才发现用while判断会有T大于sum(mi) 的问题。
所以要在循环时判断是否到头的呢death
下面是80分代码与100分代码比较:
(找不同吧)
80分:
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int n,cnt;
double t,ans;
struct aaa
{
double v,w,x;
bool operator < (const aaa &q) const {return q.x<x;}
}a[maxn];
int main()
{
cin>>n>>t;
for(int i=1;i<=n;++i)
cin>>a[i].v>>a[i].w,a[i].x=a[i].w/a[i].v;
sort(a+1,a+1+n);
while(t>a[++cnt].v)
{
t-=a[cnt].v;
ans+=a[cnt].w;
}
ans+=a[cnt].x*t;
printf("%.2f",ans);
return 0;
}
100分:
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int n,cnt;
double t,ans;
struct aaa
{
double v,w,x;
bool operator < (const aaa &q) const {return q.x<x;}
}a[maxn];
int main()
{
cin>>n>>t;
for(int i=1;i<=n;++i)
cin>>a[i].v>>a[i].w,a[i].x=a[i].w/a[i].v;
sort(a+1,a+1+n);
while(t>=a[++cnt].v&&cnt<=n)
{
t-=a[cnt].v;
ans+=a[cnt].w;
}
if(t>0)
{
if(cnt<=n)
ans+=a[cnt].x*t;
}
printf("%.2f",ans);
return 0;
}