bzoj 4300 //4300: 绝世好题

bzoj 4300   //4300: 绝世好题   //在线测评地址https://www.lydsy.com/JudgeOnline/problem.php?id=4300

更多题解,详见https://blog.csdn.net/mrcrack/article/details/90228694BZOJ刷题记录

//4300: 绝世好题
//在线测评地址https://www.lydsy.com/JudgeOnline/problem.php?id=4300
//bi&bi-1!=0执行顺序
#include <stdio.h>
int main(){
    int b;
    scanf("%d",&b);
    printf("%d\n",b&b-1!=0);
    printf("%d\n",(b&(b-1))!=0);
    printf("%d\n",b&((b-1)!=0));
}

noilinux@ubuntu:~/program/bzoj/4300$ ./4300
0
0
0
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
1
0
0
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
2
0
0
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
3
1
1
1
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
4
0
0
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
5
1
1
1
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
6
0
1
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
7
1
1
1
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
8
0
0
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
9
1
1
1
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
10
0
1
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
11
1
1
1
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
12
0
1
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
13
1
1
1
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
14
0
1
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
15
1
1
1
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
16
0
0
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
17
1
1
1
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
18
0
1
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
19
1
1
1
//基本可确定,b&b-1!=0执行情况如b&((b-1)!=0) 2019-7-27 11:07

//基本可确定,b&b-1!=0执行情况如b&((b-1)!=0)
//发现样例输出结果对不上了
//搜索网络,发现bi-1中的i-1是个整体,作为b的脚标,我的天,题目表述不清啊
//bi与bi-1是数列中相邻的2个数,2019-7-27 12:41

//探索bi&bi-1!=0的意义 2019-7-27 12:53

#include <stdio.h>
int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d\n",b&a!=0);
    printf("%d\n",(b&a)!=0);
    printf("%d\n",b&(a!=0));
}

//noilinux@ubuntu:~/program/bzoj/4300$ ./4300
1 2
0
0
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
2 3
1
1
1
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
3 4
0
0
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
5 6
0
1
0
noilinux@ubuntu:~/program/bzoj/4300$ ./4300
4 5
1
1
1

//题目还需修改,需要表达的意思是(bi&bi-1)!=0   2019-7-27 12:54
//还有一个问题,子序列b取自a,是从a中连续取,还是可以从a中间隔取,没说清.
//此文思路写得不错https://www.cnblogs.com/ljh2000-jump/p/5814135.html摘抄如下
//f[i]表示处理到当前数,第i位不为0的最优长度。转移很好转。
//此文代码写得不错https://blog.csdn.net/mys_c_k/article/details/72564247
//样例通过,提交Wrong_Answer.
//ansx=0;//漏了此处的初始化
//修改,提交AC.2019-7-27 23:16
#include <stdio.h>
#include <string.h>
int f[40];
int max(int a,int b){
    return a>b?a:b;
}
int main(){
    int n,x,i,ansx,ans=0;
    memset(f,0,sizeof(f));
    scanf("%d",&n);
    while(n--){
        ansx=0;//漏了此处的初始化
        scanf("%d",&x);
        for(i=0;i<32;i++)
            if(x&(1<<i))ansx=max(ansx,f[i]+1);//更新值x为结尾,对应的最长序列 长度,
        for(i=0;i<32;i++)
            if(x&(1<<i))f[i]=ansx;//更新以第i位为1的最大值.
        ans=max(ansx,ans);
    }
    printf("%d\n",ans);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值