zoukankan      html  css  js  c++  java
  • 计蒜客普及组模拟赛

    今天没事闲的看到计蒜客有个普及组模拟赛,就当练了练手去打了,成绩低的可怜。。。400分崩成280分AK梦想化作泡影

    第一题 同学的爱好 链接:https://nanti.jisuanke.com/t/17291

    小学应用题难度?大概画个图就能懂,把每个部分都标上号,算出a,b,c,d,e,f的部分,进行运算就行了。

    不多解释了,直接上代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int a,b,c,d,e,f,n;
    int main(){
        cin>>n;
        cin>>a>>b>>c>>d>>e>>f;
        int x=0,y=0;
        y=d+e+f;
        x=a+b+c-n;
        int ans=0;
        ans=y-x;
        cout<<ans;
        return 0;
    }

    第二题 选秀 链接:https://nanti.jisuanke.com/t/17292

    直接从0到1001进行模拟,但是注意魅力值可以是实数,所以有小数可以得到票的情况,开两个数组进行比较(感觉有点多余啊)。最后扫一遍比较最多的票数。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int a[1005],b[1005];
    int n,ans,x;
    char q[5];
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%s%d",q,&x);
            if(q[0]=='='){a[x]++;b[x]++;}
            if(q[0]=='>'&&q[1]!='='){
                for(int k=x+1;k<=1001;k++){a[k]++;b[k-1]++;}
            }
            if(q[0]=='>'&&q[1]=='='){
                for(int k=x;k<=1001;k++){a[k]++;b[k]++;}
            }
            if(q[0]=='<'&&q[1]!='='){
                for(int k=x-1;k>=0;k--){a[k]++;b[k]++;}
            }
            if(q[0]=='<'&&q[1]=='='){
                for(int k=x;k>=0;k--){a[k]++;b[k]++;}
            }
        }
        for(int i=0;i<=1001;i++){
            ans=max(ans,max(a[i],b[i]));
        }
        cout<<ans;
        return 0;
    }

    第三题 摘气球 链接:https://nanti.jisuanke.com/t/17293l

    排序之后模拟,这题本来a掉的,死在排序气球高度以n长度去排序的。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    struct child{
        int x,y;
    }c[100005];
    int n,m;
    int a[100005],b[100005];
    bool cmp(child a,child b){
        return a.x<b.x;
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            scanf("%d",&c[i].x);
            c[i].y=i;
        }
        int x;
        int k=1;
        for(int i=1;i<=m;i++){
            scanf("%d",&b[i]);
        }
        sort(c+1,c+n+1,cmp);
        sort(b+1,b+m+1);
        for(int i=1;i<=m;i++){
            for(k;k<=n;){
                if(c[k].x>=b[i]){
                    a[c[k].y]++;
                    break;
                    }
                else k++;
                }
            }
        for(int i=1;i<=n;i++){
            cout<<a[i]<<endl;
            }
        return 0;
    }

    第四题 蒜头君当大厨 链接 :https://nanti.jisuanke.com/t/17294

    差分约束(为什么普及组模拟赛要有差分约束啊,话说我前几天才刚看的)

    SPFA跑一遍最长路,死于边数开太小re三个点

    #include<bits/stdc++.h>
    #define MAXN 100002
    using namespace std;
    int read()
    {
        int x=0,y=1;char c;c=getchar();
        while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*y;
    }
    struct Edge{
        int other,pre,val;
    }a[MAXN];
    int N,M,cnt,last[MAXN],dis[MAXN],in[MAXN],ans;
    bool vis[MAXN];
    void connect(int x,int y,int z)
    {
        a[++cnt]=(Edge){y,last[x],z};
        last[x]=cnt;
    }
    bool SPFA()
    {
        queue <int> q;
        memset(dis,0xef,sizeof dis);
        vis[0]=1,dis[0]=0,in[0]++;
        q.push(0);
        while(!q.empty())
        {
            int x=q.front();
            q.pop();vis[x]=false;
            for(int i=last[x];i;i=a[i].pre)
            {
                int to=a[i].other;
                if(dis[to]<dis[x]+a[i].val)
                {
                    dis[to]=dis[x]+a[i].val;
                    if(!vis[to])
                    {
                        vis[to]=true;
                        in[to]++;
                        q.push(to);
                        if(in[to]>N)return false;
                    }
                }
            }
        }
        return true;
    }
    int main()
    {
        N=read(),M=read();
        for(int i=1;i<=M;i++)
        {
            int op,x,y,z;
            op=read();
            x=read(),y=read();
            if(op<3)
            {
                z=read();
                if(op==2)swap(x,y);
                connect(x,y,z);
            }
            else if(op==3)
                connect(0,x,y);
            else if(op==4)
                connect(x,0,-y);
        } 
        for(int i=1;i<=N;++i)
            connect(0,i,0);
        if(SPFA()){
            for(int i=1;i<=N;i++)ans=max(ans,dis[i]);
            cout<<ans<<endl;
        }
        else cout<<"I can't"<<endl;
        return 0;
    }
  • 相关阅读:
    JavaScript开发中几个常用知识点总结
    编写高质量代码改善C#程序的157个建议[勿选List<T>做基类、迭代器是只读的、慎用集合可写属性]
    编写高质量代码改善C#程序的157个建议[泛型集合、选择集合、集合的安全]
    C#基础知识系列十(集合)
    Json.Net6.0入门学习试水篇
    编写高质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化]
    C#基础知识系列九(对IEnumerable和IEnumerator接口的糊涂认识)
    Asp.Net MVC3.0项目部署到Win7 64过程总结
    .sql文件l通过PLSQL导入到Oracle数据库
    PowerDesigner工具将表字段转成java实体
  • 原文地址:https://www.cnblogs.com/Elfish/p/7582304.html
Copyright © 2011-2022 走看看