大一寒假训练四(二进制枚举)【更新完成】

本次训练共7题,本文附AC代码和题目链接。

本次训练中稍有难度的题:nefu 1285 趣味解题nefu 1641 权利指数

nefu 643 teacher Li
思路就是把所有字符串的每个字符依次异或,字符对应得ascii码也是一个数字,所以字符也可以去异或。
而且在二进制中,0与任何数异或都等于那个数本身。

#include <bits/stdc++.h>
using namespace std;
int n,i,j,cas;
string x,ans;
int main()
{
    ios::sync_with_stdio(false);
    cas=0;
    while(cin>>n>>ans)
    {
        for(i=1;i<=2*n-2;i++)
        {
            cin>>x;
            for(j=0;j<max(x.length(),ans.length());j++)//这里必须取字符串较长的那个
                ans[j]=ans[j]^x[j];
        }
        printf("Scenario #%d\n",++cas);
        printf("%s\n\n",ans.c_str());
    }
    return 0;
}

nefu 1172 Find different

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,x,ans=0;
    ios::sync_with_stdio(false);
    while(cin>>n)
    {
        while(n--)
        {
            cin>>x;
            ans=ans^x;
        }
        printf("%d\n",ans);
    }
    return 0;
}

nefu 1205 和为K
这题要多组输入,单组输入会Wrong answer

#include <bits/stdc++.h>
using namespace std;
int i,j,n,k,s,a[21];
int main()
{
    while(cin>>n>>k)
    {
        for(i=0;i<n;i++)
        cin>>a[i];
        int flag=0;
        for(i=0;i<(1<<n);i++)
        {
            s=0;
            for(j=0;j<n;j++)
            {
                if(i&(1<<j))
                s=s+a[j];
            }
            if(s==k)
            {printf("Yes\n");flag=1;break;}
        }
        if(flag==0)printf("No\n");
    }
    return 0;
}

nefu 1285 趣味解题
刚开始做可能觉得有点难,其实只要把概率的计算写清楚就不难了

#include <bits/stdc++.h>
using namespace std;
int t,n,x,i,j,cnt;
double a[15],b[15],c[15],ac[15],wa[15],ans,p;
//ac[i]表示团队做对第i题的概率,wa[i]表示团队做错第i题的概率
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(i=0;i<n;i++)
            cin>>a[i];
        for(i=0;i<n;i++)
            cin>>b[i];
        for(i=0;i<n;i++)
            cin>>c[i];
        cin>>x;
        ans=0;
        for(i=0;i<(1<<n);i++)
        {
            p=1;cnt=0;
            for(j=0;j<n;j++)
            {
                wa[j]=(1-a[j])*(1-b[j])*(1-c[j]);//3个人都不会做这题,即团队做不出这题的概率
                ac[j]=1-wa[j];
                if(i&(1<<j))
                {p=p*ac[j];cnt++;}//cnt记录团队ac数量
                else
                    p=p*wa[j];
            }
            if(cnt==x)
                ans=ans+p;
        }
        printf("%.4lf\n",ans);
    }
    return 0;
}

nefu 1505 陈老师加油

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t,tmp,ans,k1,k2,i,j;
    cin>>t;
    ans=0;
    for(i=0;i<(1<<15);i++)
    {
        tmp=t;
        k1=k2=0;
        for(j=0;j<15;j++)
        {
            if(i&(1<<j))
            {tmp=tmp*2;k1++;}
            else
            {
                tmp--;k2++;
                if(tmp==0)break;
            }
        }
        if(k1==5&&k2==10&&tmp==0)ans++;
    }
    printf("%d\n",ans);
    return 0;
}

nefu 1518 纸牌游戏

#include <bits/stdc++.h>
using namespace std;
int i,j,n,k,s,ans,a[21];
int main()
{
    while(cin>>n>>k)
    {
        for(i=0;i<n;i++)
        cin>>a[i];
        ans=0;
        for(i=0;i<(1<<n);i++)
        {
            s=0;
            for(j=0;j<n;j++)
            {
                if(i&(1<<j))
                s=s+a[j];
            }
            if(s==k)
            ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}

nefu 1641 权利指数
先选出任意个小团体,选出来后做好标记(flag=1),并保证他们的票数之和小于等于总票数的一半,之后在没被选出来的小团体(flag=0)中再选出任意一个小团体,设他的票数为a[j],若加上a[j]后票数之和大于总票数的一半,那么这个a[j]就是“关键加入者”,则他的权利指数+1。

#include <bits/stdc++.h>
using namespace std;
int n,t,i,j,s,tmp,a[21],ans[21],flag[21];
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>n;
        s=0;
        for(i=0;i<n;i++)
        {cin>>a[i];s=s+a[i];}
        memset(ans,0,sizeof(ans));
        for(i=0;i<(1<<n);i++)
        {
            tmp=0;
            memset(flag,0,sizeof(flag));
            for(j=0;j<n;j++)
            {
                if(i&(1<<j))
                {tmp=tmp+a[j];flag[j]=1;}
            }
            if(tmp<=s/2)
            {
                for(j=0;j<n;j++)
                {
                    if(tmp+a[j]>s/2&&flag[j]==0)
                    ans[j]++;
                }
            }
        }
        for(i=0;i<=n-2;i++)
        printf("%d ",ans[i]);
        printf("%d\n",ans[n-1]);
    }
    return 0;
}
全部评论

相关推荐

头像 会员标识
昨天 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
今天 10:24
已编辑
叮咚买菜专裁应届生,把应届生往死里搞,千万别去,脑电图技术,控制你的精神,我操,真的🐮,5个w买你的命唉,回家了还追着我搞。
牛客吹哨人:建议细说...哨哥晚点统一更新到黑名单:不要重蹈覆辙!25届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1317104
叮咚买菜稳定性 10人发布 投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务