牛客练习赛84

比赛链接

A牛客推荐系统开发之静态特征获取

给每一个字符串一个标号

每次将str2插入str1中

int n,cnt;
string str1,str2;
map<string,int>mp;
set<int>s[maxn];
void solve()
{
    sd(n);
    rep(i,1,n)
    {
        cin>>str1>>str2;
        if(!mp[str1])mp[str1]=++cnt;
        if(!mp[str2])mp[str2]=++cnt;
        int id1=mp[str1],id2=mp[str2];
        if(s[id1].find(id2)!=s[id1].end())puts("NO");
        else puts("YES");
        s[id1].insert(id2);
    }
}

B牛客推荐系统开发之女装药水

一个4*4方格
想要将方格里全变为0
每次可以选择一个位置将其与旁边四个取反
那我直接暴力啦

bool is[5][16];
int a[5][5],tmp[5][5];
void solve()
{
    rep(i,1,4)rep(j,1,4)scanf("%1d",&a[i][j]);
    rep(i,0,15)rep(j,0,15)rep(k,0,15)rep(l,0,15)
    {
        rep(x,1,4)rep(y,1,4)tmp[x][y]=a[x][y];
        rep(x,1,4)if(i&(1<<(x-1)))
        {
            tmp[1][x]^=1;
            tmp[1][x-1]^=1;
            tmp[1][x+1]^=1;
            tmp[2][x]^=1;
        }
        rep(x,1,4)if(j&(1<<(x-1)))
        {
            tmp[2][x]^=1;
            tmp[2][x-1]^=1;
            tmp[2][x+1]^=1;
            tmp[1][x]^=1;
            tmp[3][x]^=1;
        }
        rep(x,1,4)if(k&(1<<(x-1)))
        {
            tmp[3][x]^=1;
            tmp[3][x-1]^=1;
            tmp[3][x+1]^=1;
            tmp[2][x]^=1;
            tmp[4][x]^=1;
        }
        rep(x,1,4)if(l&(1<<(x-1)))
        {
            tmp[4][x]^=1;
            tmp[4][x-1]^=1;
            tmp[4][x+1]^=1;
            tmp[3][x]^=1;
        }
        bool ju=0;
        rep(x,1,4)rep(y,1,4)if(tmp[x][y])ju=1;
        if(!ju)
        {
            puts("YES");
            return;
        }
    }
    puts("NO");
}

 C牛客推荐系统开发之选飞行棋子

分成两部分
前两个一部分 后两个一部分

int a[5][maxn],n,cnt[5],sum;
int b[maxn*maxn];
ll ans;
void solve()
{
    sd(n);
    rep(i,1,4)rep(j,1,n)scanf("%1d",&a[i][j]),cnt[i]+=a[i][j];
    rep(i,1,n)if(a[1][i]&&a[2][i])sum++;
    //12行去掉i,j两个位置能取多少 
    rep(i,1,n)rep(j,i+1,n)
    {
        int cnt1=cnt[1]-a[1][i]-a[1][j],cnt2=cnt[2]-a[2][i]-a[2][j];
        int cnt3=sum-(a[1][i]&&a[2][i])-(a[1][j]&&a[2][j]);
        b[i*n+j]=cnt1*cnt2-cnt3;
    }
    rep(i,1,n)rep(j,i+1,n)
    {
        if(i==j)continue;
        if(a[3][i]&&a[4][j])ans+=b[i*n+j];
        if(a[4][i]&&a[3][j])ans+=b[i*n+j];
    }
    plld(ans);
}

 

posted @ 2021-06-12 20:11  芥么拉  阅读(29)  评论(0编辑  收藏  举报