牛客练习赛23

A:托米的赌球
贪心,直接写一下就行了。

#include<bits/stdc++.h>
using namespace std;
#define LL long long int
#define lson rt<<1,l,m
#define rson rt<<1|1,m+1,r
int T;
int a,b;
int m[11]={100,50,20,10,5,2,1};
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&a,&b);
        int p=0;
        for(int i=0;i<7;i++)
        {
            if(p++) printf(" ");
            if(m[i]<=a)
            {
                int cmp=0;
                while(m[i]<=a) a-=m[i],cmp++;
                printf("%d",cmp);
            }
            else
                printf("0");
        }
        for(int i=1;i<7;i++)
        {
            if(p++) printf(" ");
            if(m[i]<=b)
            {
                int cmp=0;
                while(m[i]<=b) b-=m[i],cmp++;
                printf("%d",cmp);
            }
            else
                printf("0");
        }
        printf("\n");
    }
    return 0;
}

B:托米的划分
直接递归打表找规律就行了,能得到n的结果为0~n-1的和。

#include<bits/stdc++.h>
using namespace std;
#define LL long long int
#define lson rt<<1,l,m
#define rson rt<<1|1,m+1,r
int T;
LL n;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lld",&n);
        LL res=(n-1)*n/2;
        printf("%lld\n",res);
    }
    return 0;
}

C:托米的位运算
暴力枚举b序列与操作后的值,然后得到结果。

#include<bits/stdc++.h>
using namespace std;
#define LL long long int
#define lson rt<<1,l,m
#define rson rt<<1|1,m+1,r
int n;
int s[100100];
int num[100100];
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&num[i]);
    LL base=0;
    for(LL i=0;i<31;i++)
        base|=(1LL<<i);
    int cmp=0;
    for(int i=30;i>=0;i--)
    {
        LL res=base;cmp=0;
        for(int j=0;j<n;j++)
        if(num[j]&(1LL<<i))
            res=res&num[j],s[cmp++]=num[j];
        int flag=(res&(-res))<(1LL<<i);
        if(!flag) break;
    }
    printf("%d\n",cmp);
    for(int i=0;i<cmp;i++)
    {
        if(i) printf(" ");
        printf("%d",s[i]);
    }
    printf("\n");
    return 0;
}

D:托米的咒语
emmm看了别人的代码发现直接暴力居然能过9!*3000的复杂度应该怎么也过不了的,应该是数据水了。
暴力代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long int
#define lson rt<<1,l,m
#define rson rt<<1|1,m+1,r
char a[]="abcdefghi";
char s[3030];
int main()
{
    scanf("%s",s);
    int len=strlen(s);
    int res=0;
    do{
        int i=0,j=0;
        while(i<9&&j<len)
        {
            if(a[i]==s[j])
                i++,j++;
            else j++;
        }
        if(i==9) res++;
    }while(next_permutation(a,a+9));
    printf("%d\n",res);
    return 0;
}

标准写法:

猜你喜欢

转载自blog.csdn.net/b_r_e_a_d/article/details/81264534