2024初三年前集训测试1

2024初三年前集训测试1

T1 学说话 100pts

  • 找到下划线后将计数器归零。

    点击查看代码
    string s;
    int main()
    {
        freopen("word.in","r",stdin);
        freopen("word.out","w",stdout);
        int ans=0,num=0,len,i;
        cin>>s;
        len=s.size();
        for(i=0;i<=len-1;i++)
        {
            if(s[i]=='_')
            {
                ans=max(ans,num);
                num=0;
            }
            else
            {
                num++;
            }
        }
        ans=max(ans,num);
        cout<<ans<<endl;
        fclose(stdin);
        fclose(stdout);
        return 0;
    } 
    

T2 膜拜大佬 100pts

  • map 大法好。

    点击查看代码
    map<string,bool>vis;
    string s1,s2,s3;
    int main()
    {
        freopen("dalao.in","r",stdin);
        freopen("dalao.out","w",stdout);
        ll n,m,i;
        cin>>n;
        for(i=1;i<=n;i++)
        {
            cin>>s1;
            vis[s1]=true;
        }
        cin>>m;
        for(i=1;i<=m;i++)
        {
            cin>>s1>>s2>>s3;
            if(vis.find(s3)==vis.end())
            {
                cout<<"No"<<endl;
            }
            else
            {
                cout<<"Yes"<<endl;
            }
        }
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    

T3 走迷宫 70pts

  • 难点在于如何建图。

    • 把一个二维矩阵压缩成一行,即原第 i 行第 j 列的点压缩后成了第 (i1)m+j 个点。
    • @= 同样视作 . ,分别向 4 个方向在可以通过的情况下连一条边权为 1 的有向边。
    • 当我们走到传送装置上时,会离开传送到另一个传送装置。故我们选择将传送装置与另一个传送装置的 4 个方向在可以通过的情况下连一条边权为 1 的有向边。
  • 因边权只有 01 ,故使用 BFS01BFS 或其他求解单源最短路算法均可。

    点击查看代码
    struct node
    {
        ll nxt,to,w;
    }e[4000000];
    ll dis[4000000],head[4000000],sum[30],cnt=0;
    char c[2000][2000];
    bool vis[4000000];
    pair<ll,ll>zimu[30][3];
    void add(ll u,ll v,ll w)
    {
        cnt++;
        e[cnt].nxt=head[u];
        e[cnt].to=v;
        e[cnt].w=w;
        head[u]=cnt;
    }
    ll val(ll i,ll j,ll m)
    {
        return (i-1)*m+j;
    }
    void dijkstra(ll s)
    {
        memset(dis,0x3f,sizeof(dis));
        memset(vis,false,sizeof(vis));
        priority_queue<pair<ll,ll> >q;
        ll x,i;
        dis[s]=0;
        q.push(make_pair(0,-s));
        while(q.empty()==0)
        {
            x=-q.top().second;
            q.pop();
            if(vis[x]==false)
            {
                vis[x]=true;
                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("maze.in","r",stdin);
        freopen("maze.out","w",stdout);
        ll n,m,i,j,s,t;
        cin>>n>>m;
        for(i=0;i<=m+1;i++)
        {
            c[0][i]='#';
            c[n+1][i]='#';
        }
        for(i=0;i<=n+1;i++)
        {
            c[i][0]='#';
            c[i][m+1]='#';
        }
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                cin>>c[i][j];
                if(c[i][j]=='@')
                {
                    s=val(i,j,m);
                }
                if(c[i][j]=='=')
                {
                    t=val(i,j,m);
                }
                if('A'<=c[i][j]&&c[i][j]<='Z')
                {
                    sum[c[i][j]-'A'+1]++;
                    zimu[c[i][j]-'A'+1][sum[c[i][j]-'A'+1]]=make_pair(i,j);
                }
            }
        }
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                if(c[i][j]=='.'||c[i][j]=='@')
                {
                    if(c[i-1][j]!='#')
                    {
                        add(val(i,j,m),val(i-1,j,m),1);
                    }
                    if(c[i][j-1]!='#')
                    {
                        add(val(i,j,m),val(i,j-1,m),1);
                    }
                    if(c[i+1][j]!='#')
                    {
                        add(val(i,j,m),val(i+1,j,m),1);
                    }
                    if(c[i][j+1]!='#')
                    {
                        add(val(i,j,m),val(i,j+1,m),1);
                    }
                }
            }
        }
        for(i=1;i<=26;i++)
        {
            if(sum[i]!=0)
            {
                if(c[zimu[i][2].first-1][zimu[i][2].second]!='#')
                {
                    add(val(zimu[i][1].first,zimu[i][1].second,m),val(zimu[i][2].first-1,zimu[i][2].second,m),1);
                }
                if(c[zimu[i][2].first][zimu[i][2].second-1]!='#')
                {
                    add(val(zimu[i][1].first,zimu[i][1].second,m),val(zimu[i][2].first,zimu[i][2].second-1,m),1);
                }
                if(c[zimu[i][2].first+1][zimu[i][2].second]!='#')
                {
                    add(val(zimu[i][1].first,zimu[i][1].second,m),val(zimu[i][2].first+1,zimu[i][2].second,m),1);
                }
                if(c[zimu[i][2].first][zimu[i][2].second+1]!='#')
                {
                    add(val(zimu[i][1].first,zimu[i][1].second,m),val(zimu[i][2].first,zimu[i][2].second+1,m),1);
                }
                if(c[zimu[i][1].first-1][zimu[i][1].second]!='#')
                {
                    add(val(zimu[i][2].first,zimu[i][2].second,m),val(zimu[i][1].first-1,zimu[i][1].second,m),1);
                }
                if(c[zimu[i][1].first][zimu[i][1].second-1]!='#')
                {
                    add(val(zimu[i][2].first,zimu[i][2].second,m),val(zimu[i][1].first,zimu[i][1].second-1,m),1);
                }
                if(c[zimu[i][1].first+1][zimu[i][1].second]!='#')
                {
                    add(val(zimu[i][2].first,zimu[i][2].second,m),val(zimu[i][1].first+1,zimu[i][1].second,m),1);
                }
                if(c[zimu[i][1].first][zimu[i][1].second+1]!='#')
                {
                    add(val(zimu[i][2].first,zimu[i][2].second,m),val(zimu[i][1].first,zimu[i][1].second+1,m),1);
                }
            }
        }
        dijkstra(s);
        cout<<((dis[t]==0x3f3f3f3f3f3f3f3f)?-1:dis[t])<<endl;
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    

T4 鸭子游戏 10pts

  • 原题:luogu P4552 [Poetize6] IncDec Sequence 的第一问。

  • 观察到 [l,r] 内的数都加 1 或减 1 ,此时有差分数组不变,考虑进行差分。

  • b1=a1,bi=aiai1(2in) 。我们选择固定 b1 不变,题意要求转化为让 b2bn 均等于 0

  • p=i=2n[bi>0]×bi,q=i=2n[bi<0]×(bi) 。考虑先把 b2bn 都统一成正号或负号,需要 min(p,q) 次次数;然后有 i=2n|bi|=max(p,q)min(p,q) ,为使 i=2n|bi|=0 需要 max(p,q)min(p,q) 次次数。故 min(p,q)+max(p,q)min(p,q)=max(p,q) 即为所求。

    点击查看代码
    ll a[2000002],b[2000002];
    int main()
    {
        freopen("game.in","r",stdin);
        freopen("game.out","w",stdout);
        ll n,p=0,q=0,i;
        cin>>n;
        for(i=1;i<=n;i++)
        {
            cin>>a[i];
            b[i]=a[i]-a[i-1];
        }
        for(i=2;i<=n;i++)
        {
            p+=(b[i]>0)?b[i]:0;
            q+=(b[i]<0)?-b[i]:0;
        }
        cout<<max(p,q)<<endl;
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    

总结

  • T3 暴露出自己的思维和能力太差,典型套路知道不全。
  • T4 最后想出了结论,但少了个负号,挂了 90pts

后记

  • 模拟赛重复利用。
  • 这套题数据太水了,导致部分错解获得了较高的分数。
  • 部分分很足,但貌似不太符合普及难度比赛的要求,起不到提升拿部分分能力的效果。
  • T39 个测试点的数据如下。
posted @   hzoi_Shadow  阅读(60)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
扩大
缩小
点击右上角即可分享
微信分享提示