CF261C.Maxim and Matrix

普及+/提高

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Maxim loves to fill in a matrix in a special manner. Here is a pseudocode of filling in a matrix of size (m + 1) × (m + 1):

Maxim asks you to count, how many numbers m (1 ≤ m ≤ n) are there, such that the sum of values in the cells in the row number m + 1 of the resulting matrix equals t.

Expression (x xor y) means applying the operation of bitwise excluding "OR" to numbers x and y. The given operation exists in all modern programming languages. For example, in languages C++ and Java it is represented by character "^", in Pascal — by "xor".

马克西姆喜欢以一种特殊的方式填充矩阵。以下是填充一个大小为 (m+1)×(m+1)(m+1)\times(m+1) 的矩阵的伪代码:

马克西姆请你计算:在 1≤m≤n1\le m\le n 的范围内,有多少个整数 mm,使得最终得到的矩阵中第 m+1m+1 行所有单元格的数值之和恰好等于 tt。

表达式 x xor yx\ \text{xor}\ y 表示对整数 xx 和 yy 执行按位异或(exclusive OR)运算。该运算在所有现代编程语言中均存在。例如,在 C++ 和 Java 中用字符 ^ 表示,在 Pascal 中用 xor 表示。

输入格式

A single line contains two integers n and t (1 ≤ n, t ≤ 1012, t ≤ n + 1).

Please, do not use the %lld specifier to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specifier.

一行包含两个整数 nn 和 tt(1 ≤ n, t ≤ 10121 ≤ n, t ≤ 10^{12},且 t ≤ n + 1t ≤ n + 1)。

请注意,在 C++ 中读写 64 位整数时,请勿使用 %lld 说明符。推荐使用 cin、cout 流或 %I64d 说明符。

输出格式

In a single line print a single integer — the answer to the problem.

在一行中输出一个整数——该问题的答案。

输入输出样例

  • 输入#1

    1 1

    输出#1

    1
  • 输入#2

    3 2

    输出#2

    1
  • 输入#3

    3 3

    输出#3

    0
  • 输入#4

    1000000000000 1048576

    输出#4

    118606527258

输入解题思路,AI测评打分。不知道怎么写?

首页