Uva 10730 Antiarithmetic?
uva 10730
题意:给出一列数字,如果其中存在长度大于等于3的等差数列,输出no,不存在就输出yes
这道题标定了数列长度n,而且这n个数数据范围是从0到n-1,没有相同的数,这就给我们枚举提供了方便,记录每个数字出现的位置,枚举公差,判断位置对不对
#include <iostream> #include <cstdio> #define REP(i,n) for(int i=1;i<=n;i++) using namespace std; const int maxn=10000+10; int pos[maxn]; int main() { int n; char ch; while(scanf("%d%c",&n,&ch)&&n) { int t; REP(i,n) {scanf("%d",&t),pos[t]=i;} int flag=0; for(int i=1;i<n;i++) { for(int j=1;j*2+i<n;j++) { if(pos[i]<pos[i+j]&&pos[i+j]<pos[i+j+j]) flag=1; if(flag) break; } if(flag) break; } printf(flag?"no":"yes"); puts(""); } return 0; }