您的位置:首页 > 其它

Problem B:化装晚会(usaco月赛)

2017-06-15 13:11 399 查看
Problem B:化装晚会(usaco月赛)Time Limit:1000MS  Memory Limit:65536KTotal Submit:162 Accepted:104Description万圣节又到了!Farmer John打算带他的奶牛去参加一个化装晚会,但是,FJ只做了一套能容下两头总长不超过S(1 <= S <= 1,000,000)的牛的恐怖服装。FJ养了N(2 <= N <= 20,000)头按1..N顺序编号的奶牛,编号为i的奶牛的长度为L_i(1 <= L_i <= 1,000,000)。如果两头奶牛的总长度不超过S,那么她们就能穿下这套服装。 FJ想知道,如果他想选择两头不同的奶牛来穿这套衣服,一共有多少种满足条件的方案。 Input输入文件的第1行是 2个用空格隔开的整数:N 和 S, 第2..N+1行每行一个整数:L_iOutput1行: 输出1个整数,表示FJ可选择的所有方案数。注意奶牛顺序不同的两种方案是被视为相同的Sample Input
4 6
3
5
2
1
Sample Output
4
输出说明:
4种选择分别为:奶牛1和奶牛3;奶牛1和奶牛4;奶牛2和奶牛4;奶牛3和
奶牛4。
#include<cstdio>#include<algorithm>using namespace std;long long a[20010],s,n;long long check(int b,int c){int low = b,hi = n+1;while(low+1 < hi){int mid =(low + hi)/2;if(a[mid] <= c) low = mid;else hi = mid;}return low - b;}int main(){long long i,ans=0,k;//ans ????scanf("%d%d",&n,&s);//n ?????? s?? ????????for(i=1;i<=n;i++){scanf("%d",&a[i]);}sort(a+1,a+n+1);a[0]=-1;a[n+1]=1000001;for(i=1;i<=n;i++){k=a[i];ans=ans+check(i,s-a[i]);}printf("%d",ans);return 0;}
这道题目算是指针型的二分查找
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: