洛谷 P1881 绳子对折
题目描述
FJ 有一个长度为L(1<= L <= 10,000)的绳子。 这个绳子上有N(1 <= N <= 100)个结,包括两个端点。 FJ想将绳子对折,并使较短一边的绳子上的结与较长一边绳子上的结完全重合,如图所示:
找出FJ有多少种可行的折叠方案。
输入输出格式
输入格式:
第一行: 两个整数, N和L
第2至N+1行: 每一行包含一个整数表示一个结所在的位置,总有两个数为0和L
输出格式:
第一行: 一个整数表示FJ可折叠的方案数。
输入输出样例
说明
(可在1,2,3,8点处折叠)
思路:枚举
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,l,ans; int num[101]; int main(){ scanf("%d%d",&n,&l); for(int i=1;i<=n;i++) scanf("%d",&num[i]); sort(num+1,num+1+n); for(int i=2;i<=n;i++){ int l=1,r=i; while(l<=r&&num[l+1]-num[l]==num[r]-num[r-1]) l++,r--; if(l>=r) ans++; } for(int i=2;i<n;i++){ int l=i,r=n; while(l<=r&&num[l+1]-num[l]==num[r]-num[r-1]) l++,r--; if(l>=r) ans++; } cout<<ans; }
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。