对折绳子
题目如下 之前用枚举点没过 , 这是一个题解,不理解为什么排序点的坐标就可以#include<cstdio>#include<iostream>
#include<algorithm>
using namespace std;
int n,L,cnt,a;
int main(){
scanf("%d %d",&n,&L);
for(int i=1;i<=n;i++)
scanf("%d",&a);
sort(a+1,a+1+n);
for(double i=0.5;i<L;i+=0.5){
int j=lower_bound(a+1,a+1+n,i)-a-1;
int t=upper_bound(a+1,a+1+n,i)-a;
int f=1;
for(;j&&t<=n;j--,t++)
if(a+a!=i*2){
f=0;
break;
}
if(f)cnt++;
}
printf("%d\n",cnt);
return 0;
}
输入 : 5 10
0
10
6
2
4
输出 ;4
解释:“可对折节点”分别为1、2、3、8 会了 , 就是枚举中间的值 , 如果 中间下标*2 == 左节点 + 右节点
就合法
页:
[1]