sgu255:Winsock 3 Beta(二进制分析)

题目大意:

定义A(p)={x|x≤p,x的二进制表示上只有3个1},f(x)=|A(2x)?A(x)|

有n(n≤100)组数据,每组数据给出m(m≤231?1),询问f(x)=m是否有唯一解。

分析:

我们考虑f(x)→f(x+1)的变化。

如果x+1满足条件,那么2(x+1)必定也满足条件,去掉x+1新添一个2(x+1),f(x)→f(x+1)便只受2x+1的影响。

如果x+1不满足条件,那么2(x+1)必定也不满足条件,f(x)→f(x+1)仍只受2x+1的影响。

综上,f(x)→f(x+1)只受2x+1的影响,2x+1为奇数。

如果2x+1满足条件,那么f(x+1)=f(x)+1,否则f(x+1)=f(x)。

若f(x)=m有唯一解,那么第m个满足条件的奇数+2=第m+1个满足条件的奇数。也就是说第m个满足条件的奇数形如100..011,既满足末两位为1,另一个1与末两位之间至少有一个0。

至于怎么求第m个满足条件的奇数,数学方法or数位dp均可。

AC code:

#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <string>
#include <sstream>
#include <iostream>
#include <map>
#include <set>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#define pb push_back
#define mp make_pair
typedef long long LL;
typedef double DB;
typedef long double LD;
using namespace std;

int a[4];
int num[100000][4];

void pre()
{
    for(int i = 0; i <= 100000; ++i)
    {
        if(!i) num[i][1] = 1;
        if(i) num[i][2] = 1;
        if(i > 1) num[i][3] = i-1;
    }
}

int main()
{
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif

    pre();
    int Test, n;
    scanf("%d", &Test);
    while(Test--)
    {
        scanf("%d", &n);
        for(int i = 2; i <= 100000; ++i)
            if(num[i][3] < n) n -= num[i][3];
            else {a[3] = i;break;}
        for(int i = 1; i <= 100000; ++i)
            if(num[i][2] < n) n -= num[i][2];
            else {a[2] = i;break;}
        for(int i = 0; i <= 100000; ++i)
            if(num[i][1] < n) n -= num[i][1];
            else {a[1] = i;break;}
        if(a[1] == 0 && a[2] == 1 && a[3] > 2) puts("YES");
        else puts("NO");
    }
    #ifndef ONLINE_JUDGE
    fclose(stdin);
    fclose(stdout);
    #endif
    return 0;
}

时间: 2024-08-09 06:24:14

sgu255:Winsock 3 Beta(二进制分析)的相关文章

sgu-255 Winsock 3 Beta

题目大意: 给定一个函数f(x)=g(x+1)+g(x+2)+.....+g(x?2),其中g(x)=[x的二进制表示有且仅有3个1].给你N(N<=100)个输入,每个输入给你一个m(m<=231?1),要你求出f(x)=m是否存在唯一的整数解,存在输出YES,否则输出NO. 解题思路: 首先我们考虑函数f(x)的单调性,f(x+1)?f(x)=g(x?2+2)+g(x?2+1)?g(x+1),从g(x)的定以来看,那么有:g(x)=g(x?2).所以f(x+1)?f(x)=g(x?2+1)

Class文件二进制分析

本篇博文描述的是对一个很简单的java文件的对应的class文件的二进制分析. 要分析class文件的二进制格式,必须了解对应版本的jvm specification. 由于jvm specification中关于class文件的内容有点多,所以这里不在描述相同的内容. 说明:本篇博文中设计的class文件对应的jvm specification版本是 jvm 8. java文件:SimpleClassDemo1.java package com.rocky.jvm.classfile; /**

符号执行-基于python的二进制分析框架angr

转载:All Right 符号执行概述 在学习这个框架之前首先要知道符号执行.符号执行技术使用符号值代替数字值执行程序,得到的变量的值是由输入变 量的符号值和常量组成的表达式.符号执行技术首先由King在1976年提出 ,经过三十多年的发展,现在仍然被广泛研究,它在软件测试和程序验证中发挥着重 要作用.符号执行是一种重要的形式化方法和静态分析技术,它使用数学和逻辑 首先定义一些基本概念.程序的路径(path)是程序的一个语句序列,这个 语句序列包括程序的一些顺序的代码片段,代码片段之间的连接是由

JAVA中负数转二进制分析

最近在看集合源码,发现ArrayDeque里面用到了大量的&运算,这牵扯到了二进制.突然发现自己对负数的二进制有点模糊了,对此进行了一些支持补充. 首先我们要对原码.反码和补码有个了解: 1.所谓原码就是二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. 2.反码表示法规定:正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. 原码10010= 反码11101 (10010,1为符号码,故为负) (1110

扩增子分析解读6进化树 Alpha Beta多样性

分析前准备 # 进入工作目录 cd example_PE250 上一节回顾:我们的OTU获得了物种注释,并学习OTU表的各种操作————添加信息,格式转换,筛选信息. 接下来我们学习对OTU序列的进化分析.同时计算Alpha和Beta多样性值. 16. 进化树构建 进化树是基于多序列比对的结果,可展示丰富的信息,我们将在R绘图中详细解读.此处只是建树,用于Alpha, Beta多样性分析的输入文件. # clustalo多序列比对,如果没有请安装Clustal Omega clustalo -i

Beta 答辩总结(未完成)

Beta 答辩总结(未完成) 标签(空格分隔): 软工实践 Beta版本其他组评分的传送门 其他组也请尽快上传 组长:442浩晖 组员:443书豪.430海林.文航248.汉森205.兴桔123 github链接 Beta 答辩评分传送门 组内各成员贡献比例 442浩晖 443书豪 430海林 文航248 汉森205 兴桔123 本组 Beta 冲刺站立会议博客链接汇总 Beta 冲刺 (1/7) Beta 冲刺 (2/7) Beta 冲刺 (3/7) Beta 冲刺 (4/7) Beta 冲刺

Github 安全类Repo收集整理

作者:天谕链接:https://zhuanlan.zhihu.com/p/21380662来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.刚好这两天对之前github上关注的一些比较有意思的项目进行了一下分类整理,在这里列出来分享给大家,希望能对大家寻找工具或者资源有所帮助. 大部分Repo是关于安全以及Python的,也有一些其他主题的项目,有很多我都没有用过,关于项目的功能概括如果写的有不对的地方,还请大家多多包涵,给予指正. 欢迎组团欢迎一起学习交流!转载请注

黑马程序员_JavaSE基础知识总结一:Java编程前奏

------ android培训.java培训.期待与您交流! ---------- 一.计算机概述 1.软硬件与语言 根据冯·诺依曼体系结构,计算机可以划分为五个部分:存储器.运算器.控制器.输入设备.输出设备.我们可以更加简单地把计算机划分为软硬件两个部分,硬件是指计算机系统中由电子,机械和光电元件等组成的各种物理装置,这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础,常见如显示器.扫描仪.键盘等:软件是一系列按照特定顺序组织的计算机数据和指令的集合,又可分为系统软件

Github安全整理(转载)

刚好这两天对之前github上关注的一些比较有意思的项目进行了一下分类整理,在这里列出来分享给大家,希望能对大家寻找工具或者资源有所帮助. 大部分Repo是关于安全以及Python的,也有一些其他主题的项目,有很多我都没有用过,关于项目的功能概括如果写的有不对的地方,还请大家多多包涵,给予指正. 欢迎组团欢迎一起学习交流!转载请注明出处. 链接:http://blog.leanote.com/post/b0ss/Github%E5%AE%89%E5%85%A8%E6%95%B4%E7%90%86