化妆晚会

来源:互联网 发布:mysql for mac 安装 编辑:程序博客网 时间:2024/04/27 14:37

(分治)化装晚会

题目描述

万圣节又到了!FJ打算带他的奶牛去参加化装晚会,但是,FJ只做了一套能容下两头总长不超过S (1≤S≤1000000)的奶牛恐怖服装。FJ养了N(2≤N≤20000)头按1--N顺序编号的奶牛,编号为i的奶牛的长度为L_i(1≤L_i≤1000000)。如果两头奶牛的总长度不超过S,那么她们就能穿下这套服装。
FJ想知道,如果他想选择两头不同的奶牛来穿这套衣服,一共有多少种满足条件的方案。

输入

第1行是2个整数:N和S;
第2~N+l行每行一个整数:L_i。

输出

1个整数,表示FJ可选择的所有方案数。注意奶牛顺序不同的两种方案是被视为相同的。

样例输入

4 6

5

3

2

1

样例输出

4

提示

样例说明:4种选择分别为:奶牛1和奶牛3;奶牛l和奶牛4;奶牛2和奶牛4;奶牛3和奶牛4。


AC代码:

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int a[20010];int main (){int n,l,count;scanf("%d%d",&n,&l);int i,j;for (i=0;i<n;i++){  scanf("%d",&a[i]);}sort(a,a+n);count=0;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){      if(a[i]+a[j]<=l)        count++;      elsebreak; }}printf("%d",count);return 0;}



第一次用了sort函数,觉得真是个好东西。

大体思路:这个题目上写了个分治,但是我还没看分治,我就先把我写的这个贴在这里,这个题我超时两次,第一次直接用的两个for循环,然后判断if满足条件count++,但是现在想这样不超时才怪,然后我就用冒泡排序后再判断,又超时,这时候我才想起来sort函数,虽然没学还c++,但是我见过sort,交了两次才想起来,真是惭愧。

排序后,从第一个数开始,依次向后,1+2,1+3,1+4,1+5...23,24,25...,34,35...这样只要加到某个不合条件,后面的就不需要加了,break即可。

原创粉丝点击