AcWing 周赛

146 阅读2分钟

5029. 极值数量

题目详情

给定一个长度为 n 的整数数组 a1,a2,…,an。 如果一个元素左右两边均有相邻元素(也就是不位于数组的两端),且满足以下两个条件之一:

  • 该元素的值严格大于其左右相邻元素的值
  • 该元素的值严格小于其左右相邻元素的值

则称该元素为一个极值元素。 请你计算,给定数组中有多少个极值元素。

输入格式

第一行包含整数 n。

第二行包含 n 个整数 a1,a2,,ana1,a2,…,an

输出格式

一个整数,表示极值元素的数量。

数据范围

前 3 个测试点满足 1n51≤n≤5。 所有测试点满足 1n10001ai10001≤n≤1000,1≤a_i≤1000

输入样例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使得 a×x+b×y=ca×x+b×y=c成立。

输入格式

第一行包含整数 T,表示共有 T 组测试数据。

每组数据占一行,包含三个正整数 a,b,c。

输出格式

每组数据输出一行结果,如果可以找到两个非负整数 x,y,使得 a×x+b×y=c a×x+b×y=c 成立,则输出 Yes,否则输出 No

数据范围

所有测试点满足 1T51a,b1001c10001≤T≤5,1≤a,b≤100,1≤c≤1000

输入样例:

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;
}