题目注意两个地方:一个是k的取值范围太大,需要longlong保存,一个是除了第一位的胜场是从0计数,剩下n-1位的胜场都是从1计数。
/* * 20171028 */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <cstdlib> using namespace std; int p[1005]; int main() { memset(p,0,sizeof(p)); int n; long long k; scanf("%d%I64d",&n,&k); int maxnum = 0; for(int i=0;i<n;i++) { scanf("%d",&p[i]); maxnum = max(maxnum,p[i]); } if(k>=n-1) printf("%d\n",maxnum); else { int i = 0; int j = 0; int cnt = 0; while(i<n) { j = 1; while(cnt<k) { if(p[i+j]>p[i]) { i = i+j; cnt = 1; if(cnt==k) { printf("%d\n",p[i]); i = n+1; break; } break; }else { cnt++; j++; if(cnt==k) { printf("%d\n",p[i]); i = n+1; break; } } } } } return 0; }