[NOIP2010冲刺十二] 奶牛晒衣服
2012-10-25 20:53
579 查看
【题目描述】
在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝。熊大妈决定给每个宝宝都穿上可爱的婴儿装。于是,为牛宝宝洗晒衣服就成了很不爽的事情。圣人王担负起了这个重任。洗完衣服后,你就要弄干衣服。衣服在自然条件下用1的时间可以晒干A点湿度。抠门的熊大妈买了1台烘衣机。使用烘衣机可以让你用1的时间使1件衣服除开自然晒干的A点湿度外,还可烘干B点湿度,但在1的时间内只能对1件衣服使用。
N件的衣服因为种种原因而不一样湿,现在告诉你每件衣服的湿度,要你求出弄干所有衣服的最少时间(湿度为0为干)。
【输入格式】
第一行N,A,B;接下来N行,每行一个数,表示衣服的湿度(1≤湿度,A,B≤500000,1≤N≤500000)。【输出格式】
一行,最少时间。【样例输入】
dry.in3 2 1
1 2 3
【样例输出】
dry.out1
【提示】
样例解析:第1个时间内,用机器处理第3件衣服,此外,所有衣服自然晒干2。花费1时间全部弄干。一开始想了个贪心发,WA30。原来是错误的!
标答是二分加验证,而且我发现了一个很好的方法解决困扰了我很久的二分的分法问题。
#include<iostream> #include<fstream> using namespace std; ifstream fin("dry.in"); ofstream fout("dry.out"); int n,A,B,a[500005]; void Quick(int l,int r){ if(l>=r) return ; int i=l,j=r,mid=a[(l+r)/2]; while(i<=j) { while(a[i]>mid) i++; while(a[j]<mid) j--; if(i<=j) {swap(a[i],a[j]);i++;j--;} } Quick(l,j); Quick(i,r); } int Check(int mid){ int ans=0; for(int i=1;i<=n;++i) { if(a[i]-mid*A<=0) return 1; int x=a[i]-mid*A; if(x%B==0) ans+=x/B; else ans+=x/B+1; if(ans>mid) return 0; } } int main() { fin>>n>>A>>B; for(int i=1;i<=n;++i) fin>>a[i]; Quick(1,n); int l=0,r=0,mid; if(a[1]%A==0) r=a[1]/A;else r=a[1]/A+1; mid=(l+r)/2; while(l<=r) { if(Check(mid)) r=mid-1; else l=mid+1;mid=(l+r)/2; } if(!Check(mid)) mid++; //亮起来 fout<<mid<<endl;//system("pause"); return 0; }
相关文章推荐
- 【NOIP2010冲刺十二模拟赛】奶牛晒衣服
- 线段树 1212. [NOIP2010冲刺十二] 奶牛排队
- [NOIP2010冲刺十二] 奶牛排队
- [NOIP2010冲刺十二] 圆圈舞蹈
- NOIP模拟赛-奶牛晒衣服(dry)
- 1077. [NOIP2010冲刺六] 数列游戏
- [NOIP模拟赛][贪心]奶牛晒衣服.
- 【CJOJ P1957】【NOIP2010冲刺十模拟赛】数字积木
- 【CJOJ P1957】【NOIP2010冲刺十模拟赛】数字积木
- [NOIP2010冲刺十三] 逃离遗迹
- 【JZOJ 5445】【NOIP2017提高A组冲刺11.2】失格
- NOIP 2010 - 普及组 导弹拦截 贪心 重庆一中高2018级竞赛班第三次测试 2016.7.24 Problem 3
- NOIP-2010 机器翻译
- [冲刺NOIP]C++ 头文件
- bzoj 2097: [Usaco2010 Dec]Exercise 奶牛健美操【二分+树形dp】
- NOIP2010 乌龟棋 解题报告(4维DP)
- [NOIP2010]关押罪犯
- NOIP2010乌龟棋
- JZOJ5459. 【NOIP2017提高A组冲刺11.7】密室
- Codevs 1069关押罪犯[Noip2010]