时间限制1.00s 内存限制125.00MB 难易度:普及−
【题目描述】
FJ 有一个长度为 L(1≤L≤10,000)的绳子。这个绳子上有 N(1≤N≤100)个结,包括两个端点。FJ 想将绳子对折,并使较短一边的绳子上的结与较长一边绳子上的结完全重合,如图所示:
找出FJ有多少种可行的折叠方案。
【输入格式】
第一行:两个整数,N 和 L。
第 2 至 N+1 行:每一行包含一个整数表示一个结所在的位置,总有两个数为 0 和 L。
【输出格式】
第一行: 一个整数表示FJ可折叠的方案数。
【输入输出样例】
输入 #1
5 10 0 10 6 2 4
输出 #1
4
【说明/提示】
(可在 1,2,3,8 点处折叠)
【算法分析】
直接模拟,随便找一个点对折,判断对折后的点是否重合。
【参考代码】
#include<bits/stdc++.h>
using namespace std;
int n,l;
int fj,a[20010],ans;
int main()
{
cin>>n>>l;
for(int i=1;i<=n;i++)
{
cin>>fj;
a[fj*2]=1;
}
for(int i=1;i<2*l;i++)
{
int cnt=1,s=0;
while(i>=s&&i+s<=2*l)
{
if(a[i-s]!=a[i+s]) cnt=0; 判断对折后的点 。
s++;
}
ans+=cnt;
}
cout<<ans;
return 0;
}