• 牛客CSP-S提高组赛前集训营2 ———— 2019.10.31


    比赛链接

    期望得分:100+20+20

    实际得分:40+20+30

    awa  cccc

    T1 :基于贪心的思路,然后开始爆搜(雾

    那必然是会死的,好吧他就是死了

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #define int long long
    using namespace std;
    int n,q,m;
    int ans,sum=-1;
    int a[400005];
    int x,y;
    inline int read();
    int cha() {
        int ans=-1;
        for(int i=1; i<=n; i++)ans=max(ans,a[i]);
        return ans;
    }
    signed main() {
        n=read(),m=read(),q=read();
        for(int i=1; i<=n; i++) {
            a[i]=read();
            ans+=a[i];
            sum=max(a[i],sum);
        }
        if(sum*m>=ans)cout<<sum<<"
    ";
        else {
            sum=ans/m;
            if(ans%m)sum++;
            cout<<sum<<"
    ";
        }
        while(q--) {
            x=read(),y=read();
            ans+=y-a[x];
            if(y<a[x]&&a[x]==sum)a[x]=y,sum=cha();
            a[x]=y;
            if(y>sum)sum=y;
            if(sum*m>=ans)cout<<sum<<"
    ";
            else {
                sum=ans/m;
                if(ans%m)sum++;
                cout<<sum<<"
    ";
            }
        }
        return 0;
    }
    inline int read() {
        int s=0,w=1;
        char ch=getchar();
        while(ch<'0'||ch>'9') {
            if(ch=='-')w=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
            s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
        return s*w;
    }
    View Code

    T2:题目倒是没看明白,smg

    就直接贴了个并查集求连通块个数,,,只拿了20分

    20分代码(☄⊙ω⊙)☄:

    //20分,k=0的情况,若k!=0,直接return 0,毫不犹豫awa
    //看我对评测机多好,希望评测机可以对我好一点
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #define int long long
    using namespace std;
    int N,M,K,ans;
    int  pre[1000050];
    int find(int a) {
        if(pre[a]!=a) pre[a]=find(pre[a]);
        return pre[a];
    }
    void join(int x,int y) {
        int fx=find(x),fy=find(y);
        if(fx!=fy) pre[fy]=fx;
    }
    inline int read() {
        int s=0,w=1;
        char ch=getchar();
        while(ch<'0'||ch>'9') {
            if(ch=='-')w=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
            s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
        return s*w;
    }
    signed main() {
        N=read(),M=read(),K=read();
        if(K!=0){
            cout<<M-K+1<<endl;
            return 0;
        }
        for(int i=1; i<=N; i++) pre[i]=i;
        for(int i=1; i<=M; i++) {
            int a,b;
            a=read(),b=read();
            join(a,b);
        }
        for(int i=1; i<=N; i++) if(pre[i]==i) ans++;
        cout<<ans;
        return 0;
    }
    View Code

    T3:暴力模拟30分

    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int inf=0x3f3f3f3f;
    int n,m,f;
    int t,l,r,x,y;
    int ans;
    int a[100001];
    bool vis[100001];
    void gai(int l,int r,int x) {
        memset(vis,false,sizeof vis);
        for(int i=l; i<=r; i++)a[i]=x;
        for(int i=1; i<=n; i++)vis[a[i]]=true;
     
    }
    void cha(int x,int y) {
        if(!vis[x]||!vis[y]) {
            ans=-1;
            return;
        }
        ans=inf;
        for(int i=1; i<=n; i++)
            for(int j=i; j<=n; j++)
                if((a[i]==x&&a[j]==y)||(a[i]==y&&a[j]==x)) {
                    ans=min(ans,abs(i-j));
                    break;
                }
        if(ans==inf)ans=-1;
    }
    int lastans;
    inline int read() {
        int s=0,w=1;
        char ch=getchar();
        while(ch<'0'||ch>'9') {
            if(ch=='-')w=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
            s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
        return s*w;
    }
    int main() {
        n=read(),m=read(),f=read();
        for(int i=1; i<=n; i++)
            a[i]=read(),vis[a[i]]=true;
        for(int i=1; i<=m; i++) {
            t=read();
            if(t==1) {
                l=read(),r=read(),x=read();
                if(f==1)l^=lastans,r^=lastans,x^=lastans;
                gai(l,r,x);
            }
            if(t==2) {
                x=read(),y=read();
                if(f)x^=lastans,y^=lastans;
                cha(x,y);
                cout<<ans<<"
    ";
                if(ans==-1)lastans=0;
                else lastans=ans;
            }
        }
        return 0;
    }
    View Code

    想要AC代码来这里

  • 相关阅读:
    c#基础语法(第二节课后作业/笔记)
    C#第四节课
    Hello, cnblog!
    64位的系统可以让IIS在32位的环境下运行asp.net程序(转)
    Web.Config中设置Session问题,导致无法向会话状态服务器发出会话状态请求
    远程测试asp.net web service 配置
    jQuery不使用$方法
    导入数据到SQL SERVER 2005方法
    图片与Base64相互转换,c#与java通用
    一道递归算法题,一道冒泡算法题
  • 原文地址:https://www.cnblogs.com/ydclyq/p/11775674.html
Copyright © 2020-2023  润新知