AcWing 练习

159 阅读1分钟

5041. 函数

已知,

image.png 给定一个整数 n,请你计算并输出 f(n) 的值。

输入格式

一个整数 n。

输出格式

一个整数,表示 f(n) 的值。

数据范围

所有测试点满足 1n601≤n≤60

输入样例1:

4

输出样例1:

4

输入样例2:

1

输出样例2:

0

解题思路

这道题很简单,直接根据题目意思先判断及奇数偶数,再输出即可。

AC代码

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    if(n%2!=0) cout<<0;
    else
    {
        int m = n / 2;
        long long res = 1;
        for(int i=0;i<m;i++)
        {
            res *= 2;
        }
        cout<<res;
    }
    return 0;
}

5039. 构造数组

给定一个长度为 n 的正整数数组 a1,a2,…,an。

请你构造一个正整数数组b1,b2,…,bn,要求:

  1. 对于 1in1biai1≤i≤n,1≤b_i≤a_i 均成立。
  2. 在满足上一要求的前提下,令 Mex(b) 尽可能大。 Mex(b) 指在数组 b 中出现过的最小整数。

请你计算并输出,Mex(b) 的最大可能值。

输入格式

第一行包含整数 n。

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

输出格式

一个整数,表示 Mex(b) 的最大可能值。

数据范围

前 4 个测试点满足 1n51≤n≤5
所有测试点满足 1n1051ai1091≤n≤10^5,1≤a_i≤10^9

输入样例1:

5
1 3 3 3 6

输出样例1:

5

输入样例2:

2
2 1

输出样例2:

3

解题思路

这是一道贪心题,其实很简单,他要让b数组中的未出现的最小正整数尽可能大,我们只需要满足a[i]>=b[i]的前提下,让b[i]尽可能小,再求出b的最大值,然后输出最大值+1就是最后的答案。
注意:这里并不需要真的开一个数组b,用res记录b数组的最大值即可,当res<a[i]时,res要加1,更新最大值。

AC代码

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100005;
int a[N];
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    sort(a,a+n);
    int res = 0;
    for(int i=0;i<n;i++)
    {
        if(res<a[i]) 
        {
            res++;
        }
    }
    cout<<res + 1;
    return 0;
}