Codeforces Round #649 (Div. 2) 补题

A题

  • 题意
    在这里插入图片描述
    找一个连续的最长子序列和不能整除x;
  • 思路
    直接看代码吧。
  • 代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
    
    
    int t;
    scanf("%d",&t);
    while (t--)
    {
    
    
        int n,x,sum=0,l=-1,r;
        scanf("%d%d",&n,&x);
        for (int i=0;i<n;i++)
        {
    
    
            int a;
            scanf("%d",&a);
            if (a%x)
            {
    
    
                if (l==-1)
                l=i;
                r=i;
            }
            sum+=a;
        }
        if (sum%x)
        printf("%d\n",n);
        else if (l==-1)
        printf("-1\n");
        else
        printf("%d\n",n-min(l+1,n-r));
    }
}

B题

  • 题意
    在这里插入图片描述
    给定一个全排列,找到一个序列,相邻差的和最大,而且最短。

  • 思路
    只要把波峰波谷留下来就行。

  • 代码

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 1e5 + 10;

int a[N];
void solve()
{
    
    
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    vector<int> ans;
    for(int i=1;i<=n;i++)
    {
    
    
        if(i==1||i==n||(a[i-1]<a[i])!=(a[i]<a[i+1]))
        ans.push_back(a[i]);
    }
    cout<<ans.size()<<endl;
    for(auto &x:ans)
    cout<<x<<" ";
    cout<<endl;
}

int main()
{
    
    
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t = 1;
    cin >> t;
    while (t--)
    {
    
    
        solve();
    }
}

C题

  • 题意

在这里插入图片描述
就是给定一个 a i a_{i} ai,让你找一个 b i b_{i} bi ,长度都是n,使得前 i i i 个元素,在b中未出现的最小的自然数。

  • 思路
    具体看代码
  • 代码
#include <bits/stdc++.h>
using namespace std;
int a[100005],b[100005];
bool ex[100005];
int main()
{
    
    
    int n;
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    scanf("%d",&a[i]);
    memset(b,-1,sizeof(b));
    for (int i=1;i<=n;i++)
    {
    
    
        if (a[i]!=a[i-1])
        {
    
    
            b[i]=a[i-1];
            ex[b[i]]=1;
        }
    }
    ex[a[n]]=1;
    int m=0;
    for (int i=1;i<=n;i++)
    {
    
    
        while (ex[m])
        m++;
        if (b[i]==-1)
        {
    
    
            b[i]=m;
            ex[m]=1;
        }
        printf("%d ",b[i]);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_46264636/article/details/113309473