竞赛讨论区 > 有没有大姥帮我看一下过不去的问题
头像
帅shuai琪
发布于 2023-11-20 15:19
+ 关注

有没有大姥帮我看一下过不去的问题

D题

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int map[18][18];
int main()
{
    for(int i=0;i<=16;i++){
        map[i][0]=-1;
        map[0][i]=-1;
        map[i][20]=-1;
        map[20][i]=-1;
    }
    int t;
    cin>>t;
    while(t--)
    {
        bool win=false;
        for(int i=1;i<=15;i++)
        {
            for(int j=1;j<=15;j++)
            {
                int shu;
                scanf("%1d",&shu);
                map[i][j]=shu;
            }
        }
        for(int i=1;i<=15;i++)
        {
            for(int j=1;j<=15;j++)
            {
                if(win)
                {
                    break;
                }
                else if(map[i][j]==1)
                {
                    for(int k=1;k<4;k++)
                    {
                        if(map[i][j+k]==1)//横着向右遍历三个,观察是否有即将胜利的条件
                        {
                            if(k==3&&(map[i][j-1]==0)||(map[i][j+4]==0))
                            {
                                
                                win=true;
                            }
                        }
                        else{
                            break;
                        }
                       
                    }
                    if(win)
                    {
                        break;
                    }
                    for(int k=1;k<4;k++)
                    {
                        if(map[i+k][j]==1)//竖着向下遍历三个,观察是否有即将胜利的条件
                        {
                            if(k==3&&((map[i-1][j]==0)||(map[i+4][j]==0)))
                            {
                                
                                win=true;
                            }
                        }
                        else{
                            break;
                        }  
                    }
                    if(win)
                    {
                        break;
                    }
                    for(int k=1;k<4;k++)
                    {
                        if(map[i+k][j-k]==1)//斜着向左下遍历三个,观察是否有即将胜利的条件
                        {
                            if(k==3&&((map[i-1][j+1]==0)||(map[i+4][j-4]==0)))
                            {
                                
                                win=true;
                            }
                        }
                        else{
                            break;
                        }
                        
                    }
                    if(win)
                    {
                        break;
                    }
                    for(int k=1;k<4;k++)
                    {
                        if(map[i+k][j+k]==1)//斜着向右下遍历三个,观察是否有即将胜利的条件
                        {
                            if(k==3&&((map[i-1][j-1]==0)||(map[i+4][j+4]==0)))
                            { 
                                win=true;
                            }
                        }
                        else{
                            break;
                        }
                       
                    }
                }//为1进入的
                
            }
        }//for循环
        if(!win)
        {
            cout<<"No"<<endl;
        }
        else{
            cout<<"Yes"<<endl;
        }
    }
}

E题

#include <iostream>
#include <cstring>
#include <algorithm>
#include<vector>
using namespace std;
int main()
{
    int n;
    cin>>n;
    vector<int>a;
    for(int i=1;i<=n;i++)
    {
        int p;
        cin>>p;
        a.push_back(p);
    }
    sort(a.begin(),a.end(),greater<int>());
    int money=a[0];
    int maxx=a[0],minn=a[0];
    for(int i=1;i<n;i++)
    {
        money=a[i]*(i+1);
        if(maxx<=money)
        {
            maxx=money;
            minn=a[i];
        }
    }
    cout<<maxx<<" "<<minn;
    return 0;
}

J题

暴力空间换时间

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=100010;
int a[N],b[N],c[N],d[N],e[N],f[N],g[N],h[N],i[N],j[N],k[N],l[N],m[N],n[N],o[N],p[N],q[N],r[N],s[N];
int t[N],u[N],v[N],w[N],x[N],y[N],z[N];
int aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,vv,ww,xx,yy,zz;
int main()
{
    int n1,m1;
    cin>>n1>>m1;
    string S;
    cin>>S;
    for(int in=0;in<S.size();in++)
    {
        if(S[in]=='a')
        {
            a[in]=++aa;
        }
        else 
        {
            a[in]=a[in-1];
        }
        if(S[in]=='b')
        {
            b[in]=++bb;
        }
        else 
        {
            b[in]=b[in-1];
        }
        if(S[in]=='c')
        {
            c[in]=++cc;
        }
        else 
        {
            c[in]=c[in-1];
        }
        if(S[in]=='d')
        {
            d[in]=++dd;
        }
        else 
        {
            d[in]=d[in-1];
        }
        if(S[in]=='e')
        {
            e[in]=++ee;
        }
        else 
        {
            e[in]=e[in-1];
        }
        if(S[in]=='f')
        {
            f[in]=++ff;
        }
        else 
        {
            f[in]=f[in-1];
        }
        if(S[in]=='g')
        {
            g[in]=++gg;
        }
        else 
        {
            g[in]=g[in-1];
        }
        if(S[in]=='h')
        {
            h[in]=++hh;
        }
        else 
        {
            h[in]=h[in-1];
        }
        if(S[in]=='i')
        {
            i[in]=++ii;
        }
        else 
        {
            i[in]=i[in-1];
        }
        if(S[in]=='g')
        {
            g[in]=++gg;
        }
        else 
        {
            g[in]=g[in-1];
        }
        if(S[in]=='k')
        {
            k[in]=++kk;
        }
        else 
        {
            k[in]=k[in-1];
        }
        if(S[in]=='l')
        {
            l[in]=++ll;
        }
        else 
        {
            l[in]=l[in-1];
        }
        if(S[in]=='m')
        {
            m[in]=++mm;
        }
        else 
        {
            m[in]=m[in-1];
        }
        if(S[in]=='n')
        {
            n[in]=++nn;
        }
        else 
        {
            n[in]=n[in-1];
        }
        if(S[in]=='o')
        {
            o[in]=++oo;
        }
        else 
        {
            o[in]=o[in-1];
        }
        if(S[in]=='p')
        {
            p[in]=++pp;
        }
        else 
        {
            p[in]=p[in-1];
        }
        if(S[in]=='q')
        {
            q[in]=++qq;
        }
        else 
        {
            q[in]=q[in-1];
        }
        if(S[in]=='r')
        {
            r[in]=++rr;
        }
        else 
        {
            r[in]=r[in-1];
        }
        if(S[in]=='s')
        {
            s[in]=++ss;
        }
        else 
        {
            s[in]=s[in-1];
        }
        if(S[in]=='t')
        {
            t[in]=++tt;
        }
        else 
        {
            t[in]=t[in-1];
        }
        if(S[in]=='u')
        {
            u[in]=++uu;
        }
        else 
        {
            u[in]=u[in-1];
        }
        if(S[in]=='v')
        {
            v[in]=++vv;
        }
        else 
        {
            v[in]=v[in-1];
        }
        if(S[in]=='w')
        {
            w[in]=++ww;
        }
        else 
        {
            w[in]=w[in-1];
        }
        if(S[in]=='x')
        {
            x[in]=++xx;
        }
        else 
        {
            x[in]=x[in-1];
        }
        if(S[in]=='y')
        {
            y[in]=++yy;
        }
        else 
        {
            y[in]=y[in-1];
        }
        if(S[in]=='z')
        {
            z[in]=++zz;
        }
        else 
        {
            z[in]=z[in-1];
        }
    }
    while(m1--)
    {
        int l1,r1;
        cin>>l1>>r1;
        l1--,r1--;
        int maxx=0;
        maxx=max({a[r1]-a[l1-1],b[r1]-b[l1-1],c[r1]-c[l1-1],d[r1]-d[l1-1],e[r1]-e[l1-1],f[r1]-f[l1-1],g[r1]-g[l1-1],h[r1]-h[l1-1],i[r1]-i[l1-1],g[r1]-g[l1-1],k[r1]-k[l1-1],l[r1]-l[l1-1],m[r1]-m[l1-1],n[r1]-n[l1-1],o[r1]-o[l1-1],p[r1]-p[l1-1],q[r1]-q[l1-1],r[r1]-r[l1-1],s[r1]-s[l1-1],t[r1]-t[l1-1],u[r1]-u[l1-1],v[r1]-v[l1-1],w[r1]-w[l1-1],x[r1]-x[l1-1],y[r1]-y[l1-1],z[r1]-z[l1-1]});
        cout<<r1-l1+1-maxx<<endl;
    }
    return 0;
    
}

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐