记录编号 278729 评测结果 AAAAAAAAAA
题目名称 砍树 最终得分 100
用户昵称 GravatarDream 是否通过 通过
代码语言 C++ 运行时间 0.636 s
提交时间 2016-07-08 15:07:28 内存使用 7.94 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <cmath>
  4. #include <vector>
  5. #include <cstdlib>
  6. #include <algorithm>
  7. #define MAX(a,b)(a>b?a:b)
  8. using namespace std;
  9. typedef long long ll;
  10. ll n,m;
  11. ll maxx=0;
  12. ll A[1000001]={0};
  13. void read(){
  14. freopen("eko.in","r",stdin);
  15. freopen("eko.out","w",stdout);
  16. }
  17.  
  18. inline ll Dread(){
  19. ll data=0;
  20. char ch=getchar();
  21. while(ch>'9'||ch<'0') ch=getchar();
  22. do{
  23. data=data*10+ch-'0';
  24. ch=getchar();
  25. }while(ch<='9'&&ch>='0');
  26. return data;
  27. }
  28.  
  29. void Debug(){
  30. ll i=n;
  31. ll sum=0;
  32. while(A[i]>114)
  33. sum=A[i--]+sum;
  34. i++;
  35. printf("%ld\n",sum);
  36. printf("%ld\n",i);
  37. }
  38.  
  39.  
  40. void Init(){
  41. scanf("%ld",&n);
  42. scanf("%ld",&m);
  43. //m=Dread();
  44. for(ll i=1;i<=n;i++){
  45. scanf("%ld",&A[i]);
  46. maxx=MAX(maxx,A[i]);
  47. }
  48. sort(A+1,A+n+1);
  49. return;
  50. }
  51.  
  52. int judge(ll high){
  53. ll tmp=0;
  54. for(ll i=n;i>=1;i--){
  55. if(A[i]>high) tmp+=(A[i]-high);
  56. else break;
  57. }
  58. if(tmp>m) return -1;//high is too low
  59. if(tmp==m) return 0;
  60. if(tmp<m) return 1;//high is too high
  61. }
  62.  
  63.  
  64. int main(){
  65. read();
  66. Init();
  67. //Debug();
  68. ll l=0,r=maxx+1;
  69. ll mid;
  70. while(l<=r){
  71. mid=(l+r)>>1;
  72. int ok=judge(mid);
  73. if(ok==-1||ok==0) l=mid+1;
  74. if(ok==1) r=mid-1;
  75. //if(ok==0){printf("%ld",mid) ; break;}
  76. }
  77. printf("%ld",r);
  78. return 0;
  79. }
  80.