嘿嘿嘿

水题使我快乐~~~

C题 Constructive Problems Never Die

大意:有a数组,输出b数组(从1~n),使bi!=aib_i !=a_i 思路:遇到bi=aib_i=a_i 的,swap一下就好了

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
ll i,n,m,k,l,j;
ll a[100005],b[100005];
int main()
{
    cin>>l;
    while(l--)
    {
        ll fl=1;
        cin>>n;
        for(i=1;i<=n;i++)
        {
            cin>>a[i];
            b[i]=i;
        }
        for(i=1;i<n;i++)
        {
            if(a[i]!=a[i+1])
            {
                fl=0;
                break;
            }
        }
        if(fl)
        {
            cout<<"NO\n";
        }
        else
        {
            for(ll i=1;i<=n;i++)
        {
            if(a[i]==b[i])
            {
                for(ll j=1;j<=n;j++)
                {
                    if(a[i]!=b[j]&&b[i]!=a[j])
                    {
                        swap(b[i],b[j]);
                    }
                }
            }
        }
        cout<<"YES\n";
        for(ll i=1;i<=n;i++)cout<<b[i]<<" ";
        cout<<"\n";
        }
         
    }
}

不会有人要漂代码吧

F题 Candies

整个列表暴力过去就好了 首尾加个特判。 这里弄个更高级的:

#include <bits/stdc++.h>
int a[101010],n,k,as=0;
int main(){
     
    scanf("%d%d",&n,&k);
    int x,y;
    for (int i=0;i<n;++i) {
        scanf("%d",&x);
        if(x>=k-x) x=k-x;
        else x=x;
        if (i&&x==a[i-1]) i-=2,n-=2,++as;
        else a[i]=x;
    }
    x=0,y=n-1;
    while (x<y&&a[x]==a[y]) ++x,--y,++as;
    printf("%d",as);
     
    return 0;
}

我做的时候居然时间超限,后来看看,96分,哭死。TNND

又水了一篇文章呢。