牛客练习赛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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值