5029. 极值数量
题目详情
给定一个长度为 n 的整数数组 a1,a2,…,an。 如果一个元素左右两边均有相邻元素(也就是不位于数组的两端),且满足以下两个条件之一:
- 该元素的值严格大于其左右相邻元素的值
- 该元素的值严格小于其左右相邻元素的值
则称该元素为一个极值元素。 请你计算,给定数组中有多少个极值元素。
输入格式
第一行包含整数 n。
第二行包含 n 个整数 。
输出格式
一个整数,表示极值元素的数量。
数据范围
前 3 个测试点满足 。 所有测试点满足 。
输入样例1:
3
1 2 3
输出样例1:
0
输入样例2:
4
1 5 2 5
输出样例2:
2
解题思路
这题很简单,就是让我们统计给出的数组中,存在几个元素满足当前元素既大于(或小于)前一个元素,又大于(或小于)后一个元素。当然前提是前一个和后一个都存在。所以只有两个或少于两个元素时,我们可以直接输出0。否则就枚举来找符合条件的个数。
AC代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define int long long
#define endl '\n'
typedef long long ll;
const int N =100005;
int a[N];
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
if(n<=2)
{
cout<<0;
return 0;
}
int cnt = 0;
for(int i=1;i<=n-2;i++)
{
if((a[i]>a[i+1] && a[i]>a[i-1]) || (a[i]<a[i+1] && a[i]<a[i-1]))
{
cnt++;
}
}
cout<<cnt;
return 0;
}
4978. 解方程
题目详情
给定三个正整数 a,b,c。
请你判断,能否找到两个非负整数 x,y使得 成立。
输入格式
第一行包含整数 T,表示共有 T 组测试数据。
每组数据占一行,包含三个正整数 a,b,c。
输出格式
每组数据输出一行结果,如果可以找到两个非负整数 x,y,使得 成立,则输出 Yes,否则输出 No。
数据范围
所有测试点满足 。
输入样例:
3
4 6 15
3 2 7
6 11 6
输出样例:
No
Yes
Yes
解题思路
这题也不难,直接枚举就好,因为a、b都是大于1的数,所以x、y一定不能大于c,我们直接从0~c开始枚举x和y即可,如果存在满足条件的x、y就输出Yes并跳出循环,否则就输出No即可。
AC代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define int long long
#define endl '\n'
typedef long long ll;
const int N =100005;
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
{
int a,b,c;
cin>>a>>b>>c;
bool flag = false,f1 = false;
for(int i = 0;i<=c;i++)
{
for(int j = 0;j<=c;j++)
{
if(a * i + b * j == c)
{
cout<<"Yes"<<endl;
flag = true;
f1 = true;
break;
}
}
if(f1) break;
}
if(!flag) cout<<"No"<<endl;
}
return 0;
}