1 solutions
-
0
C++ :
#include<stdio.h> using namespace std; int a[57],b[37],ansa[57],ansb[37],f,r,f1,r1,f2,r2,i,cnt; double sum,tot,ans,c[2017],t; void find_r(int k,int step) { int i,j; if (step==r+1) { if (a[f]*b[r]<3*a[1]*b[1]) return; //if (a[f]/b[1]<3*a[1]/b cnt=0; sum=tot=0; for (i=1;i<=f;i++) for (j=1;j<=r;j++) c[++cnt]=double(a[i])/double(b[j]); for (i=1;i<cnt;i++) for (j=i+1;j<=cnt;j++) if (c[i]>c[j]) {t=c[i];c[i]=c[j];c[j]=t;} for (i=1;i<cnt;i++){c[i]=c[i+1]-c[i];sum+=c[i];} sum/=--cnt; for (i=1;i<=cnt;i++) tot+=(c[i]-sum)*(c[i]-sum); if (tot<ans) { ans=tot; for (i=1;i<=f;i++) ansa[i]=a[i]; for (i=1;i<=r;i++) ansb[i]=b[i]; } return; } for (i=k;i<=r2-r+step;i++) { b[step]=i; find_r(i+1,step+1); } } void find_f(int k,int step) { if (step==f+1){find_r(r1,1);return;} for (int i=k;i<=f2-f+step;i++) { a[step]=i; find_f(i+1,step+1); } } int main() { scanf("%ld%ld",&f,&r); scanf("%ld%ld%ld%ld",&f1,&f2,&r1,&r2); ans=99999999; find_f(f1,1); for (i=1;i<f;i++) printf("%ld ",ansa[i]);printf("%ld\n",ansa[f]); for (i=1;i<r;i++) printf("%ld ",ansb[i]);printf("%ld\n",ansb[r]); //scanf("%ld%ld",&f,&r); return 0; }
- 1
Information
- ID
- 19419
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By