Atcoder 056 D 贪心+二分
来源:互联网 发布:csgo举报机器人软件 编辑:程序博客网 时间:2024/05/14 19:26
D - No Need
Time limit : 2sec / Memory limit : 256MB
Score : 600 points
Problem Statement
AtCoDeer the deer has N cards with positive integers written on them. The number on the i-th card (1≤i≤N) is ai. Because he loves big numbers, he calls a subset of the cards good when the sum of the numbers written on the cards in the subset, is K or greater.
Then, for each card i, he judges whether it is unnecessary or not, as follows:
- If, for any good subset of the cards containing card i, the set that can be obtained by eliminating card i from the subset is also good, card i is unnecessary.
- Otherwise, card i is NOT unnecessary.
Find the number of the unnecessary cards. Here, he judges each card independently, and he does not throw away cards that turn out to be unnecessary.
Constraints
- All input values are integers.
- 1≤N≤5000
- 1≤K≤5000
- 1≤ai≤109(1≤i≤N)
Partial Score
- 300 points will be awarded for passing the test set satisfying N,K≤400.
Input
The input is given from Standard Input in the following format:
N Ka1 a2 ... aN
Output
Print the number of the unnecessary cards.
Sample Input 1
3 61 4 3
Sample Output 1
1
There are two good sets: {2,3} and {1,2,3}.
Card 1 is only contained in {1,2,3}, and this set without card 1, {2,3}, is also good. Thus, card 1 is unnecessary.
For card 2, a good set {2,3} without card 2, {3}, is not good. Thus, card 2 is NOT unnecessary.
Neither is card 3 for a similar reason, hence the answer is 1.
Sample Input 2
5 4003 1 4 1 5
Sample Output 2
5
In this case, there is no good set. Therefore, all the cards are unnecessary.
Sample Input 3
6 2010 4 3 10 25 2
Sample Output 3
3
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>using namespace std;int s[5050];bool cmp(int a,int b){return a<b;}int main(){//freopen("input.txt", "r", stdin);//freopen("output.txt", "w", stdout);int n,k;scanf("%d%d",&n,&k);int num=n,temp,ans=1;for(int i=1;i<=n;i++){scanf("%d",&temp);if(temp>=k) num--;else s[ans++]=temp;}ans--;sort(s+1,s+num+1,cmp);temp=0;while(num>=2){temp+=s[num];if(s[num-1]+temp<k){num--;continue;}if(s[1]+temp>=k){ans=0;break;}int l=1,r=num-2;while(l+1<r){int mid=(l+r)/2;if(temp+s[mid]>=k) r=mid;else l=mid;}ans=ans-(num-r);num=r;}printf("%d\n",ans);return 0;}
- Atcoder 056 D 贪心+二分
- Atcoder-Sports Festival(二分+暴力+思维+贪心)
- 二分贪心专题D
- 二分贪心 D
- 二分贪心 D
- 二分贪心 D题
- 二分贪心—D
- 二分贪心-D
- 二分贪心d
- 二分贪心-D
- CFcontest377-D 贪心,二分
- AtCoder Grand Contest 011 A\B 贪心、二分
- Atcoder D
- [整体二分 并查集]Atcoder AGC002 D. Stamp Rally
- Codeforces 609D 贪心+二分
- codeforces 732D (二分 贪心)
- 【codeforces 732D】【二分+贪心】
- Codeforces #732D 二分 贪心
- AOP 之 6.6 通知参数
- MySQL 事务没有提交导致 锁等待 Lock wait timeout exceeded
- AngularJs页面数据不加载的解决思路
- Android 让EditText失去焦点避免自动弹出输入法
- js中return的用法
- Atcoder 056 D 贪心+二分
- 分治法:求给定数组A[1:n]的最大连续子数组
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- 【专访】户外决策将成为您的第三只眼睛-艾宇
- 20个非常有用的Java程序片段
- pip安装需要的各种库
- (floyed反求最长路径)ZOJ 2797 106 miles to Chicago
- 高可用性方案
- redis介绍