本题直接暴力枚举所有非法三元组判断即可;
但当10000 的时候非法三元组个数为 24599000;目前估计同时满足这么多条件的n长串很少,导致程序秒过;或者说句很水;
#include<cstdio> #include<vector> #include<queue> #include<cmath> #include<cstring> #include <cstdlib> #include<iostream> #include<algorithm> using namespace std; typedef long long LL; const int maxn = 10100; int a[maxn],n; int main() { while(scanf("%d",&n)==1&&n){ scanf(":"); for(int i=1;i<=n;i++){ int x; scanf("%d",&x); x++; a[x] = i; } bool flag=true; for(int i=1;i<=n;i++){ for(int j=1;i+2*j<=n;j++){ if( (a[i] < a[j+i] && a[j+i] < a[j+j+i]) ||(a[i] > a[j+i] && a[j+i] > a[j+j+i]) ) {flag=false; break;} } if(!flag) break; } if(flag) printf("yes\n"); else printf("no\n"); } return 0; }