化妆晚会

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangxiaoduoduo/article/details/76099874

(分治)化装晚会

题目描述

万圣节又到了!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++;
      		else
				break; 
		}
	}
	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即可。

阅读更多

没有更多推荐了,返回首页