题意:
给你n个木条,问有多少种方案组成三角形、
题解:
将所有木条排序,因为三角形两边之和大于第三边,找出小于两边之和的木条
#include "cstdio"
#include "algorithm"
using namespace std;
int a[10100];
int main() {
int n, caseno = 0, cases;
scanf("%d", &cases);
while( cases-- ) {
scanf("%d",&n);
int summ=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
for(int i=1;i<=n-2;i++){
for(int j=i+1;j<=n-1;j++){
int c=a[i]+a[j];
long k = lower_bound (a+1, a+n+1, c) - a;
summ+=(k-j-1);
}
}
printf("Case %d: %d\n", ++caseno, summ );
}
return 0;
}
”