number

题目描述

给定整数 \(m,k\),求出正整数 \(n\) 使得 \(n+1,n+2,…,2n\) 中恰好有 \(m\) 个数在二进制下恰好有 \(k\) 个 \(1\)。 有多组数据。

输入数据

第一行一个整数 \(t\) 表示数据组数。接下来 \(t\) 行每行两个整数 \(m\),\(k\)。

输出数据

每组数据输出一行两个整数,第一个数表示 \(long \ long\) 范围内任意一个满足条件的 \(n\),第二个数表示满足条件的 \(n\) 的个数(无穷多用\(-1\)表示)。 保证 \(10^{18}\) 以内存在满足条件的 \(n\)。

如果每组数据第一个数全部正确,得 \(4\) 分。

如果每组数据第二个数全部正确,得 \(6\) 分。

数据范围

对于 \(10\%\) 的数据, \(k=2\)。

对于 \(20\%\) 的数据, \(k<=3\)。

对于另外 \(50\%\) 的数据, 保证满足条件的 \(n\) 均在 \(10^{18}\) 以内。

对于 \(100\%\) 的数据, \(t<=2000\), $0<=m<=10^{18}, \(1<=k<=64\)。


打表吧。

然后发现\(k\)一定时,\(m\)随\(n\)增大在整数域上连续增大。

进一步发现,其实\(m\)变化时的\(n\)是二进制下\(k-1\)个\(1\)从小到大排序而成的

于是可以预处理组合数求一下啦

要特判\(m=0\)


Code:

#include <cstdio>
#define ll long long
ll C[70][70];
void init()
{
C[0][0]=1;
for(int i=1;i<=67;i++)
{
C[i][0]=1;
for(int j=1;j<=i;j++)
C[i][j]=C[i-1][j-1]+C[i-1][j];
}
}
int t;
ll cal(int k,ll m)
{
if(m==-1) return 0;
ll ans=0;
while(k)
{
int pos=k;
while(C[pos][k]<=m) ++pos;
--pos;
ans|=1ll<<pos;
m-=C[pos][k];
k--;
}
return ans;
}
int main()
{
init();
scanf("%d",&t);
while(t--)
{
ll m;int k;
scanf("%lld%d",&m,&k);
--k;
if(!k)
printf("1 -1\n");
else
{
ll r=cal(k,m),l=cal(k,m-1);
printf("%lld %lld\n",l+1ll,r-l);
}
}
return 0;
}

2018.10.13

number 解题报告的更多相关文章

  1. 【九度OJ】题目1040:Prime Number 解题报告

    [九度OJ]题目1040:Prime Number 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1040 题目描述: Ou ...

  2. 【LeetCode】Largest Number 解题报告

    [LeetCode]Largest Number 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/largest-number/# ...

  3. 【LeetCode】306. Additive Number 解题报告(Python)

    [LeetCode]306. Additive Number 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...

  4. USACO Section1.2 Name That Number 解题报告

    namenum解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...

  5. ACM Minimum Inversion Number 解题报告 -线段树

    C - Minimum Inversion Number Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &a ...

  6. 【LeetCode】263. Ugly Number 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 除去2,3,5因子 日期 [LeetCode] 题目 ...

  7. 【LeetCode】 202. Happy Number 解题报告(Java & Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 迭代 日期 [LeetCode] 题目地址:h ...

  8. 【LeetCode】246. Strobogrammatic Number 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcode ...

  9. 【LeetCode】1056. Confusing Number 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcode ...

  10. 【LeetCode】171. Excel Sheet Column Number 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目大意 解题方法 Java解法 Python解法 日期 [LeetCode] 题 ...

随机推荐

  1. C# 用HttpWebRequest模拟一个虚假的IP伪造ip

    有人会说:IP验证是在TCP层完成的,不是HTTP层完成的,如果伪造IP的话可能连TCP的三次握手都完不成.我这里说的不是完全意义的伪造.如果你使用透明代理上网,那么在透明代理发送给服务器端的HTTP ...

  2. laravel路由组+中间件

    在rotues中的web.php

  3. JavaSE 第二次学习随笔(三)

    * 常见异常 * 数组越界异常 * 空指针异常 * * * 特点: 当程序出现异常的时候, 程序会打印异常信息并中断程序 * 所以当同时出现多个异常的时候只能执行第一个, 后边的用不到 * * 单异常 ...

  4. scala成长之路(3)隐式转换

    不废话,先上例子:定义一个参数类型为String的函数: scala> def sayHello(name:String) = println("hello " + name ...

  5. 帆软中使用switch将控件的显示值“传递”给单元格

    如下图,控件的实际值和显示值是我们自定义的. 当我们选择控件时,想要在某个单元格内显示控件的显示值.一般我们在单元格内直接 $控件名  可以获得控件值.比如当我们选择事故数时,我们自然不能在单元格内直 ...

  6. 一笔画问题 南阳acm42(貌似没用到什么算法)

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

  7. javaWeb总结

    url传值时:如out.println("<td><a href = 'delete.jsp?user=" + user + "'>删除</ ...

  8. CONCATENATE命令(文字列の結合)

    CONCATENATE命令とは文字列の結合を行う命令である.文字列を扱うChar, Numeric, Dats, Time, Stringの変数で使用する事が可能だ.単純に文字列の結合のみを行う方法. ...

  9. ajax同步和异步的切换

    ajax为网页提供了非常不错的异步机制,但是有时候两个ajax放在一起,希望第一个完成后再继续第二个ajax的执行.这时候可以将第一个ajax代码带上同步参数即可,如下: $.ajax({ async ...

  10. 3122 奶牛代理商 VIII(状压dp)

    3122 奶牛代理商 VIII  时间限制: 3 s  空间限制: 256000 KB  题目等级 : 大师 Master     题目描述 Description 小徐是USACO中国区的奶牛代理商 ...