您的位置:首页 > 其它

高效算法设计专项:UVa 10730

2013-04-30 21:54 274 查看
注意到输入为一个全排列,所以可以标记每个数的位置,而非每个位置上的数,然后枚举所有可能构成等差数列的数,通过位置关系判断即可。

#include <iostream>
#include <cstdio>
using namespace std;
#define M 10010
char c;
int n,a[M],t;
void solve()
{
for(int i=0;i<n;i++)
for(int j=1;2*j+i<n;j++)
{
if(a[i]<a[i+j]&&a[i+j]<a[i+2*j]||a[i]>a[i+j]&&a[i+j]>a[i+2*j])
{
cout<<"no"<<endl;return;
}
}
cout<<"yes"<<endl;
}
int main()
{
freopen("in.txt","r",stdin);
while(cin>>n&&n)
{
cin>>c;
for(int i=0;i<n;i++)
{
cin>>t;
a[t]=i;
}
solve();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: