[关闭]
@Alpacadh 2019-02-15T21:06:32.000000Z 字数 2657 阅读 727

D,E,F题解

ACM


D - River Hopscotch

题意:

解题思路:

代码:

  1. //#include<bits/stdc++.h>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<stdio.h>
  7. #include<cstdlib>
  8. #include<cstdio>
  9. using namespace std;
  10. const int inf=0x3f3f3f3f;
  11. const int N=5e4+5;
  12. const double eps=1e-4;
  13. typedef long long ll;
  14. typedef pair<int,ll> pil;
  15. int a[N];
  16. int n,m;
  17. int check(int x)
  18. {
  19. int sum=0;
  20. int k=0;
  21. for(int i=1;i<=n+1;i++)
  22. {
  23. if(a[i]-a[k]<x)
  24. sum++;//说明可以移除该块
  25. else
  26. k=i;
  27. }
  28. if(sum>m)
  29. return 1;
  30. return 0;
  31. }
  32. int main()
  33. {
  34. int ll;
  35. scanf("%d%d%d",&ll,&n,&m);
  36. for(int i=1;i<=n;i++)
  37. scanf("%d",&a[i]);
  38. sort(a+1,a+1+n);
  39. a[n+1]=ll;
  40. int l=0,r=ll;
  41. while(l<r)
  42. {
  43. int mid=(l+r+1)/2;
  44. if(check(mid))
  45. r=mid-1;
  46. else
  47. l=mid;
  48. }
  49. printf("%d\n",l);
  50. return 0;
  51. }

E - Communication System

题意:

解题思路:

代码:

  1. //#include<bits/stdc++.h>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<stdio.h>
  7. #include<cstdlib>
  8. #include<cstdio>
  9. using namespace std;
  10. const int inf=0x3f3f3f3f;
  11. const int N=1e2+5;
  12. const double eps=1e-4;
  13. typedef long long ll;
  14. typedef pair<int,ll> pil;
  15. int n;
  16. int cnt[N];
  17. int b[N][N];
  18. int p[N][N];
  19. int ans[N*N];
  20. double f(int x)
  21. {
  22. double sum=0;
  23. for(int i=0;i<n;i++)
  24. {
  25. int mi=inf;
  26. for(int j=0;j<cnt[i];j++)
  27. {
  28. if(ans[x]<=b[i][j])
  29. mi=min(mi,p[i][j]);
  30. }
  31. sum+=mi;
  32. }
  33. return ans[x]/sum;
  34. }
  35. int main()
  36. {
  37. int t;
  38. scanf("%d",&t);
  39. while(t--)
  40. {
  41. scanf("%d",&n);
  42. int k=0;
  43. for(int i=0;i<n;i++)
  44. {
  45. scanf("%d",&cnt[i]);
  46. for(int j=0;j<cnt[i];j++)
  47. {
  48. scanf("%d%d",&b[i][j],&p[i][j]);
  49. ans[k++]=b[i][j];
  50. }
  51. }
  52. sort(ans,ans+k);
  53. int l=0,r=k-1;
  54. int mid,midmid;
  55. while(l<r-1)
  56. {
  57. mid=(l+r)/2;
  58. midmid=(mid+r)/2;
  59. if(f(mid)>f(midmid))
  60. r=midmid;
  61. else
  62. l=mid;
  63. }
  64. printf("%.3f\n",max(f(r),f(l)));
  65. }
  66. return 0;
  67. }

F - Light Bulb

题意:

解题思路:

代码:

  1. //#include<bits/stdc++.h>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<stdio.h>
  7. #include<cstdlib>
  8. #include<cstdio>
  9. using namespace std;
  10. const int inf=0x3f3f3f3f;
  11. const int N=5e4+5;
  12. const double eps=1e-4;
  13. typedef long long ll;
  14. typedef pair<int,ll> pil;
  15. double H,h,D;
  16. double f(double x)
  17. {
  18. return (h*D-H*x)/(D-x)+x;
  19. }
  20. int main()
  21. {
  22. int t;
  23. scanf("%d",&t);
  24. while(t--)
  25. {
  26. scanf("%lf%lf%lf",&H,&h,&D);
  27. double l=0,r=h/H*D;
  28. double mid,midmid;
  29. while(r-l>eps)
  30. {
  31. mid=(l+r)/2;
  32. midmid=(mid+r)/2;
  33. if(f(mid)<f(midmid))
  34. l=mid;
  35. else
  36. r=midmid;
  37. }
  38. printf("%.3f\n",f(l));
  39. }
  40. return 0;
  41. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注