#includeusing namespace std; double a[105], t, m[105], v[105], ans; int n; int main() { cin>>n>>t; for(int i=1;i<=n;i++) { cin>>m[i]>>v[i]; a[i]=v[i]/m[i]; } for(int i=1;i<=n;i++) { for(int j=1;j 抄了这个代码,会有一个大问题(
是不是感觉我在骗你)。首先要明白,在C++中,如果用除法,会丢失一些精度,虽说没太大影响,但小数部分会有变动,以至于我们要用乘法代替除法。给大家举个结构体例子
(这啥玩意儿☹):X.V/X.M>Y.V/Y.M
我们让两边的分母各乘一个X.M*Y.M,这样式子就变成了
X.V*Y.M>Y.V*X.M
这就完美解决了除法精度有误的问题。
题解是我家,AC靠大家 二话不说来贴代码。
#includeusing namespace std; double ans; int n,t; struct coin { int m, v; }a[105]; bool cmp(coin x, coin y) { return x.v*y.m>y.v*x.m; } int main() { cin>>n>>t; for(int i=1;i<=n;i++) { cin>>a[i].m>>a[i].v; } int c=t; sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++) { if(c>a[i].m) { c-=a[i].m; ans+=a[i].v; } else { ans+=1.0*a[i].v/a[i].m*c; break; } } printf("%.2lfn",ans); return 0; } 这么认真地看了,不如点个赞吧!!!