Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:无语了,G++一直WA,换成C++就过了In Reply To:无语了,G++一直WA,换成C++就过了 Posted by:b157 at 2017-10-04 00:08:46 > 有大佬可以解释一下为什么吗? > 附程序 > > > #include <cstdio> > #include <iostream> > #include <algorithm> > #include <math.h> > #include <cmath> > #define mem0(a) memset(a,0,sizeof(a)) > #define meminf(a) memset(a,0x3f,sizeof(a)) > using namespace std; > typedef long long ll; > typedef long double ld; > typedef double db; > const int maxn=10005,inf=0x3f3f3f3f; > const ll llinf=0x3f3f3f3f3f3f3f3f; > const db eps=1e-6; > > struct Pack{ > db a,b,d; > }; > Pack p[maxn]; > > bool cmp(Pack x,Pack y) { > return x.d<y.d; > } > > db Dinkelbach(int n,int k) { > db ans=0,l; > while (true) { > l=ans; > int i; db s0,s1; > for (i=1;i<=n;i++) { > p[i].d=p[i].a-l*p[i].b; > } > sort(p+1,p+n+1,cmp); > s0=s1=0; > for (i=k+1;i<=n;i++) { > s0+=p[i].a;s1+=p[i].b; > } > ans=s0/s1; > if (fabs(l-ans)<eps) return ans; > } > } > > int main() { > int n,k; > scanf("%d%d",&n,&k); > while (n||k) { > int i; > ll s1,s0; > s1=s0=0; > for (i=1;i<=n;i++) > scanf("%lf",&p[i].a); > for (i=1;i<=n;i++) > scanf("%lf",&p[i].b); > db ans=Dinkelbach(n,k); > printf("%.0lf\n",ans*100.0); > scanf("%d%d",&n,&k); > } > return 0; > } 您好,亲测这个 `printf("%.0lf\n", ans * 100.0);`,在不同的编译器中结果不一样。 用 `printf("%d\n", int(ans * 100 + 0.5));` 就可以。 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator