牛客小白月赛114【待补】

39 阅读1分钟
题目难度知识点
A 曹髦签到
B 沙摩柯签到
C 戏志才签到
D 神孙权★★前后缀

曹髦

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],ans[N],n;
int main(void)
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i],ans[i]=a[i]-1;
    ans[1]+=2;
    for(int i=1;i<=n;i++) cout<<min(ans[i],5)<<" ";
    return 0;
}

沙摩柯

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*5+10;
int a[N],n;
map<int,int>mp;
int main(void)
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    long long int ans=0;
    for(int i=1;i<=n;i++)
    {
        if(a[i]<=n&&mp[a[i]]==0) ans+=a[i];
        mp[a[i]]++;
    }
    cout<<ans;
    return 0;
}

戏志才

找环,且x在环上。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*5+10;
int a[N],st[N],n,x;
void solve()
{
    cin>>n>>x;
    int w=x;
    for(int i=1;i<=n;i++) cin>>a[i];
    int flag=0;
    while(1)
    {
        if(st[x]) 
        {
            if(x==w) flag=1;
            break;
        }
        st[x]=1,x=a[x];
    }
    if(flag) puts("Yes");
    else puts("No");
}
int main(void)
{
    solve();
    return 0;
}

神孙权

image.png

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*5+10;
typedef long long int LL;
LL a[N],s[N],n,k,len,l[N],r[N];
int main(void)
{
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>a[i];
    LL temp=k;
    for(int i=0;i<=n;i++)
    {
        if(temp-i<0)
        {
            break;
        }
        temp+=1,temp-=i;
        len++;
    }
    for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
    for(int i=1;i<=n;i++) l[i]=max(l[i-1],s[i]);
    for(int i=n;i>=1;i--) r[i]=max(r[i+1],s[n]-s[i-1]);   
    LL ans=0;
    len=min(len,n);
    for(int i=0;i<=len;i++)//前面最多摸多少牌
    {
        int cnt=len-i;//后面最多摸多少牌
        ans=max({ans,l[i]+r[n-cnt+1]});//前边不超过摸牌次数的最大前缀+后边不超过摸牌次数的最大后缀。
    }
    cout<<ans;
    return 0;
}