153 - The 15th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple - A
Peak
题目链接:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5752
解题思路:这道题目题意不难理解,但是自己却读题之后又多想了一些,导致WAWAWAWAWA(呜呜呜呜呜.........)
那在这说一下,题目的意思就是说(判断所给的数列是否满足如图所示的关系)
再直观点表示这个数列所需满足的关系如图所示:
好,读到这里大致题意就懂了,再看看数据范围:1 < k < n(也就是说k不能是这个数列的第一个数和最后一个数)。
emmmmm.....准备开始敲代码了,但是不知道为什么我把这么简单题在写代码的时候想复杂了,我把所给的样例数列都重新排了一遍,看其能不能重新形成一个满足题意的peak数列。然后WA了,又重新读题才发现,只是需要判断就可以了。
代码如下:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MaxN = 1e5 + 7;
long long a[MaxN];
int main()
{
int n,i,flag = 0;
scanf("%d",&n);
while(n--)
{
int m,max = 0;
scanf("%d",&m);
for(i = 0;i < m; i++)
scanf("%d",&a[i]);
if(m % 2 != 0)
{
for(i = 0;i < m; i++)
{
if(a[i] > max)
max = a[i];
}
int num = 0;
for(i = 0;i < m; i++)
{
if(a[i] == max)
num++;
}
if(num > 1)
printf("No\n");
else
{
int ans = 1;
sort(a,a + m);
for(i = 1;i < m; i++)
{
if(a[i] == a[i - 1])
{
flag = 1;
ans++;
}
}
if(flag == 1)
{
if(ans % 2 == 0)
printf("Yes\n");
else
printf("No\n");
}
else
printf("Yes\n");
}
}
else
printf("No\n");
}
return 0;
}
如有错误地方或者书写不当,还望大家留言,多多指教!