牛客小白月赛63

比赛链接:牛客小白月赛63_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ

A题

签到题,把所有数按位与一遍就行。

#include
using namespace std;

int main()
{
    int n,a,ans;
    cin>>n;
    cin>>a;
    ans=a;
    for(int i=2;i<=n;++i)
    {
        cin>>a;
        ans=a&ans;
    }

    cout<

B题:

阅读理解题,暴力,遍历每次攻击,判断是否击杀随从,击杀则attack++,在每次循环最后计算boss伤害的增量。

#include
using namespace std;

int main()
{
    int n,m;
    int attack=2;
    int a[1005];
    int ans=0;
    cin>>n>>m;

    for(int i=1;i<=n;++i)
    {
        cin>>a[i];
    }

    for(int i=1;i<=m;++i)
    {
        for(int j=1;j<=n;++j)
        {
            if(attack==a[j])
            {
                attack++;
                a[j]=-1;
            }
            else
            {
                a[j]-=attack;
            }
        }
        ans+=attack;
    }

    cout<

c题

核心在于如何求n个数的全排列,这里我用了一个dfs,x为当前处理的位数,i为该位放置的数字。当x==n时,根据双方对应的大爹个数,计算是谁赢了还是平局,给对应计数器加1.

#include
using namespace std;

typedef long long ll;

int n;
int a[15],b[15];
ll victory=0,equ=0,defeat=0;
bool vis[15]={false};
ll va=0,vb=0;

void dfs(int x)
{
    for(int i=1;i<=n;++i)
    {
        if(vis[i]==false)
        {
            vis[i]=true;
            if(a[x]>b[i]) va++;
            else if(a[x]vb) victory++;
                else if(vab[i]) va--;
            else if(a[x]>n;
    for(int i=1;i<=n;++i) cin>>a[i];
    for(int i=1;i<=n;++i) cin>>b[i];

    dfs(1);

    cout<

D题

我觉得这个题的难度配不上D这个编号,贪心,每次选最便宜那个颜色,到第三个时,换第二便宜的颜色,然后继续用最便宜的。最后,首尾相接,所以最后那朵花用第二便宜颜色染,防止与最开始两朵花颜色连续。

#include
#include
using namespace std;

typedef long long ll;

int main()
{
    ll n,m;
    ll a[5];
    ll ans=0;
    int two=0;
    cin>>n>>m;
    for(int i=1;i<=m;++i)
    {
        cin>>a[i];
    }

    sort(a+1,a+m+1);

    for(int i=1;i=3) cout<<"Ginger666"<

E题

你可能感兴趣的:(寒假练习,算法)