2023年多校联训NOIP层测试7+【LGR-149-Div.3】洛谷基础赛 #2 & qw Round -1

2023年多校联训NOIP层测试7,集训欢乐赛,绝对欢乐,童叟无欺

赛时在回家的路上+睡觉,所以没打。

\(T1\) 近似ybtOJ 2049:【例5.19】字符串判等

  • 本题少了对空格的判断,水题。
    • PS:题面和题解中都写了文件输入输出,测评时没有文件输入输出是几个意思,艹。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    int main()
    {
        //freopen("lexi.in","r",stdin);
        //freopen("lexi.out","w",stdout);
        string a,b;
        int n,i,flag=0;
        cin>>a>>b;
        n=a.size();
        for(i=0;i<=n-1;i++)
        {
            if('A'<=a[i]&&a[i]<='Z')
            {
                a[i]=a[i]-'A'+'a';
            }
            if('A'<=b[i]&&b[i]<='Z')
            {
                b[i]=b[i]-'A'+'a';
            }
            if(a[i]<b[i])
            {
                flag=1;
                cout<<"-1";
                break;
            }
            if(a[i]>b[i])
            {
                flag=1;
                cout<<"1";
                break;
            }
        }
        if(flag==0)
        {
            cout<<"0";
        }
        return 0;
    }
    

\(T2\) 染色

  • 暂时咕了。

\(T3\) 质因数分解

  • 暂时咕了。

\(T4\) 滑冰

  • \(1 \le n \le 2 \times 10^5\)
  • 部分分:\(N^2\) 暴力建边,跑 \(Floyd\) or \(Dijkstra\)
  • 正解:
    • 这题挺有意思,如果是第一次做很难想出这种思路。
    • \(len[i][j]\) 表示从 \(i\)\(j\) 的距离,考虑对于点 \(i,j,k\) ,若 \(x_i<x_j<x_k\) ,暂时不考虑 \(y\) 的情况,则此时有 \(len[i][k]=len[i][j]+len[j][k]\) ,即 \(x_k-x_i=(x_j-x_i)+(x_k-x_j)\) ,说明只需要连接从 \(i\)\(j\)\(j\)\(k\) 两条边,不需要连接从 \(i\)\(k\) 的边。对于 \(y\) 同理。建好边后,跑 \(Dijkstra\)
    • 考虑分别对 \(x\)\(y\) 进行排序,从小到大连边即可。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    struct huabing
    {
        int x,y,id;
    }a[1000001];
    struct node
    {
        int nxt,to,w;
    }e[1000001];
    int head[1000001],dis[1000001],vis[1000001],cnt=0;
    bool cmp1(huabing p,huabing q)
    {
        return p.x<q.x;
    }
    bool cmp2(huabing p,huabing q)
    {
        return p.y<q.y;
    }
    void add(int u,int v,int w)
    {
        cnt++;
        e[cnt].nxt=head[u];
        e[cnt].to=v;
        e[cnt].w=w;
        head[u]=cnt;
    }
    void dijkstra(int s)
    {
        int x,i;
        priority_queue<pair<int,int> >q;
        memset(vis,0,sizeof(vis));
        memset(dis,0x3f,sizeof(dis));
        dis[s]=0;
        q.push(make_pair(0,s));
        while(q.empty()==0)
        {
            x=q.top().second;
            q.pop();
            if(vis[x]==0)
            {
                vis[x]=1;
                for(i=head[x];i!=0;i=e[i].nxt)
                {
                    if(dis[e[i].to]>dis[x]+e[i].w)
                    {
                        dis[e[i].to]=dis[x]+e[i].w;
                        q.push(make_pair(-dis[e[i].to],e[i].to));
                    }
                }
            }
        }
    }
    int main()
    {
        //freopen("shortest.in","r",stdin);
        //freopen("shortest.out","w",stdout);
        int n,i;
        cin>>n;
        for(i=1;i<=n;i++)
        {
            cin>>a[i].x>>a[i].y;
            a[i].id=i;
        }
        sort(a+1,a+1+n,cmp1);
        for(i=1;i<=n-1;i++)
        {
            add(a[i].id,a[i+1].id,a[i+1].x-a[i].x);
            add(a[i+1].id,a[i].id,a[i+1].x-a[i].x);
        }
        sort(a+1,a+1+n,cmp2);
        for(i=1;i<=n-1;i++)
        {
            add(a[i].id,a[i+1].id,a[i+1].y-a[i].y);
            add(a[i+1].id,a[i].id,a[i+1].y-a[i].y);
        }
        dijkstra(1);
        cout<<dis[n]<<endl;
        return 0;
    }
    

【LGR-149-Div.3】洛谷基础赛 #2 & qw Round -1

一觉睡到了下午5点20,打完 \(T1\)\(T2\) 就懒得打了。交得太晚了,被罚时拉排名了(祭)。

\(T1\) luoguP9516 color \(100pts\)

  • 水题, \(2min\) 切了。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    int main()
    {
        int a,b,c,d,e,f;
        cin>>a>>b>>c>>d>>e;
        f=a+b+c+d+e;
        if(0<=f&&f<=99)
        {
            cout<<"Gray";
        }
        if(100<=f&&f<=119)
        {
            cout<<"Blue";
        }
        if(120<=f&&f<=169)
        {
            cout<<"Green";
        }
        if(170<=f&&f<=229)
        {
            cout<<"Orange";
        }
        if(230<=f&&f<=500)
        {
            cout<<"Red";
        }
        return 0;
    }
    

\(T2\) luoguP9517 drink \(100pts\)

  • 水题, \(5min\) 切了。
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define sort stable_sort 
    #define endl '\n'
    int a[100002];
    int main()
    {
        int n,i,l=0,r=0;
        cin>>n;
        for(i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        for(i=1;i<=n;i++)
        {
            if(a[i]==1)
            {
                l=i;
                break;
            }
        }
        for(i=n;i>=1;i--)
        {
            if(a[i]==1)
            {
                r=i;
                break;
            }
        }
        if(l==r)//貌似有专门卡这个的数据,一下子就想到了
        {
            cout<<"0";
        }
        else
        {
            cout<<r-l+1;
        }
        return 0;
    }
    

\(T3\) luoguP9518 queue \(0pts\)

  • 有时间再写,暂时咕了。

\(T4\) luoguP9519 pay \(0pts\)

  • 有时间再写,暂时咕了。

后记

NOIP=CSP-J/S

posted @ 2023-08-13 20:20  hzoi_Shadow  阅读(60)  评论(0编辑  收藏  举报
扩大
缩小