• 考试总结 2018-5-22


      第一次正规的多校训练赛,由于多种原因考的非常差,30分。

      第一题是一道数论题,应该属于很简单的那种,打几个if就行。然后就写了一个暴力版本找规律:

      

      以对角线为界,下面的都是1赢,下面的都是2赢。而对角线上的情况则是a%2==1是a赢,a%2==0时b赢。

      而我考试结束的时候的版本没有删掉freopen,对于样例是对的(不知道为啥就对了),而评测的时候会爆零,因为不需要用(说好的OI赛制)。并且删了freopen之后还是不能AC,因为我用的是cin,读入会炸(万恶的出题人卡快读) 。把这俩问题都改了就能AC了。

    using namespace std;
    int n,a,b;
    int read()
    {
      int x=0;char ch=getchar();
      while(ch>'9'||ch<'0')  ch=getchar();
      while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
      return x;
    }
    int main()
    {
    
        n=read();
        while(n!=0)
        {
            n=n-1;
            a=read();b=read();
            if(a>b)
            {
                printf("AWaDa!");
                printf("
    ");
                continue;
            }
            if(a<b)
            {
                printf("AKTang!");
                printf("
    ");
                continue;
            }
            if(a%2==1)
            {
                printf("AWaDa!");
                printf("
    ");
            }
            else
            {
                cout<<"AKTang!"<<endl;
                printf("
    ");
            }
        }
        return 0;
    }
    t1

      本题得了0分。

      第二题是一道贪心的题目,放置最少的点使得每个区间上都存在点。那么按照右端点为第一关键字排序,每次都放在当前不能炸掉的桥的右端点,一定是最优解。然后再把能炸掉的都炸掉(放过去),再做一次决策。

      考虑到第一题,这道题也加入了快读。

    using namespace std;
    int n,t,i,now,ans;
    int read()
    {
      int x=0;char ch=getchar();
      while(ch>'9'||ch<'0')  ch=getchar();
      while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
      return x;
    }
    struct ppp
    {
        int a,b;
    }o[100010];
    bool mycmp(ppp x,ppp y)
    {
        if(x.b==y.b)return x.a<y.a;
        
        return x.b<y.b;
    }
    int main()
    {
    ios::sync_with_stdio(false);
        n=read();
        for(i=1;i<=n;i++)
        {
            o[i].a=read();
            o[i].b=read();
            t=read();
        }
        sort(o+1,o+1+n,mycmp);
        for(now=1;now<=n;)
        {
            ans++;
            t=o[now].b;
            while(o[now].a<=t&&now<=n)
            {
                now++;
            }
        }
        cout<<ans;
        return 0;
    }
    t2

      用了我在考试的时候还没有改数组大小,导致只拿了30分。

      第三题是一个最短路的问题,还算是裸吧(连我都会),对于两个星球做一次最短路,然后判断两个端点用哪个更近。然后就开始写dijkstra,调试的快吐了(当时就发誓考完后一定好好学图论)。

    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<iomanip>
    using namespace std;
    int n,m,sum,a[10010][10010],dis[10010];
    int read()
    {
      int x=0;char ch=getchar();
      while(ch>'9'||ch<'0')  ch=getchar();
      while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
      return x;
    }
    struct ppp
    {
        int u,v,w;
        int ans[5];
    }x[10010],y[10010];
    bool vis[10010];
    void d(int st)
    {
        for(int i=1;i<=n+3;i++)
            dis[i]=a[i][st];
        memset(vis,0,sizeof(vis));
        vis[st]=1;dis[st]=0;
        for(int i=1;i<n+3;i++)
        {
            int minn=100000000;
            int k=0;
            for(int j=1;j<=n+3;j++)
            if((!vis[j])&&dis[j]<minn)
            {
            minn=dis[j];                
            k=j;    
        }
        if(k==0)return;
        vis[k]=1;
        for(int j=1;j<=n+3;j++)
            if((!vis[j])&&(dis[k]+a[k][j]<dis[j]))
                dis[j]=dis[k]+a[k][j];
        }
    }
    int main()
    {
        n=read();
        m=read();
        sum=read();
        for(int i=0;i<=n+5;i++)
            for(int f=0;f<=n+5;f++)
                a[i][f]=a[f][i]=100010;
        for(int i=1;i<=m;i++)
        {
            x[i].u=read();
            x[i].v=read();
            x[i].w=read();
            a[x[i].u][x[i].v]=a[x[i].v][x[i].u]=min(a[x[i].v][x[i].u],x[i].w);
        }
        for(int i=1;i<=sum;i++)
        {
            y[i].u=read();
            y[i].v=read();
            y[i].w=read();
            a[y[i].u][y[i].v]=a[y[i].v][y[i].u]=min(a[y[i].v][y[i].u],y[i].w);
        }
    ////////////////////////////////////////////
        d(n+1);
        for(int i=1;i<=m;i++)
        {
            x[i].ans[1]=dis[x[i].u];        
            x[i].ans[3]=dis[x[i].v];
        }
    //////////////////////////////////    
        d(n+2);
        for(int i=1;i<=m;i++)
        {
            x[i].ans[4]=dis[x[i].u];
            x[i].ans[2]=dis[x[i].v];
            x[i].ans[0]=min(x[i].ans[1]+x[i].ans[2],x[i].ans[3]+x[i].ans[4])+x[i].w;
            if(x[i].ans[0]>100010)
            {
                printf("GG");
            }
            else
                printf("%d",x[i].ans[0]);
            printf("
    ");
        }
    }
    t3

      考试的时候还没有把自己的代码放上去,只放了个样例,就很气了。

      第四题还没写完就结束了。。。。

      本次考试非常爆炸,如果让我把代码换一下的话大概可以拿到200多一点。以后我一定要每道题都写快读,不用freopen,好好学图论,争取下次考试拿到高分。

      

  • 相关阅读:
    linux命令查询网站
    UTC(世界协调时间)时区和各个时区时间的转换
    dev-c++ 中写完源文件生成exe程序怎么避免运行闪退?
    numpy和time计时程序
    进化算法之粒子群算法和Matlab实现(多维)
    tf.config:GPU 的使用与分配(转载)
    限制TensorFlow只在CPU上运行的方法
    Python重要学习链接
    SpringCloud 之 Nacos 注册配置中心
    Jenkins 自动化部署入门详细教程
  • 原文地址:https://www.cnblogs.com/qywyt/p/9076191.html
Copyright © 2020-2023  润新知