柿子饼同学 发表于 2022-7-5 10:37:59

对折绳子

题目如下 之前用枚举点没过 , 这是一个题解,不理解为什么排序点的坐标就可以#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

柿子饼同学 发表于 2022-7-7 09:52:11

会了 , 就是枚举中间的值 , 如果 中间下标*2 == 左节点 + 右节点
就合法
页: [1]
查看完整版本: 对折绳子