ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Drying POJ - 3104

2021-03-06 02:01:06  阅读:170  来源: 互联网

标签:3104 res LL Drying mid int POJ 烘干机 include


原题链接

考察:二分

第一次做这题我还以为是dfs.....

思路:

        首先烘干时间符合单调性,二分烘干时间,难点在如何写判断函数.首先两种情况:

  1. a[i]<=s,直接无视.
  2. a[i]>s,需要考虑它用烘干机的时间,注意不能直接算把它烘干完的时间,因为浪费的时间没有利用,假设它用烘干机的时间是t,那么a[i]-t*k<=mid-t(即烘干剩下的水分必须能被剩余时间自动晒干),移项 mid>=a[i]-t*(k-1). mid已知,a[i]已知,k已知,未知是t,因为t是使用烘干机的时间,对所有衣服进行累加,如果和>mid此解不可行.

注意:要特别处理k=1的情况.有除法就要考虑/0

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 typedef long long LL;
 7 const int N = 100010;
 8 int a[N],n,k;
 9 bool check(LL s)
10 {
11     LL res = 0;
12     for(int i=1;i<=n;i++)
13         if(a[i]>s&&k>1)
14             res += (LL)(a[i]-s+k-2)/(k-1);
15         else if(a[i]>s&&k==1) return 0;
16     if(res<=s) return 1;
17     return 0;
18 }
19 int main() 
20 {
21     while(scanf("%d",&n)!=EOF&&n)
22     {
23         LL r = 0;
24         for(int i=1;i<=n;i++) scanf("%d",&a[i]),r=r+a[i];
25         scanf("%d",&k);
26         LL l = 1;
27         while(l<r)
28         {
29             LL mid = l+r>>1;
30             if(check(mid)) r = mid;
31             else l = mid+1;
32         }
33         printf("%lld\n",r);
34     }
35     return 0;
36 }

 

标签:3104,res,LL,Drying,mid,int,POJ,烘干机,include
来源: https://www.cnblogs.com/newblg/p/14489286.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有