題意:給定一個長爲n的(0,1,2....n-1)的排列,問是否存在等差數列。
題解:可以記錄每個數出現的位置pos[i],枚舉等差數列中間項以及公差,判斷(pos[i+d]-pos[i])*(pos[i-d]-pos[i])是否小於0。
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=10005;
int pos[N];
int main()
{
int n,f;
while(scanf("%d",&n),n)
{
getchar();
for(int i=0,tp;i<n;i++)
{
scanf("%d",&tp);
pos[tp]=i;
}
f=0;
for(int i=1;!f&&i<n-1;i++)
for(int j=1,lim=min(n-1-i,i);!f&&j<=lim;j++)
if((pos[i+j]-pos[i])*(pos[i-j]-pos[i])<0)
f=1;
printf("%s\n",f?"no":"yes");
}
return 0;
}