传送门

解题思路

  组合数学。首先肯定是要先枚举位数,假如枚举到第\(i\)位。我们可以把第一位固定,然后那么后面的随意放\(1\),个数就为\(C_{i-1}^{k-1}\)。然后每次枚举时如果方案\(>n\)就说明位数为\(i\),否则就让\(n-C_{i-1}^{k-1}\),然后继续枚举下去。这样的话我们就确定了第一位,后面的位其实和数位\(dp\)里试填法的思路差不多,就是看\(n\)是否大于当前位为\(0\)时后面的方案数,如果大就把这一位设为\(1\),然后减掉方案。算组合数有一个小\(trick\)就是先用分子约一个分母里比较大的,因为这道题\(k<=10\),所以约完后暴力乘是不会炸\(long long\)的。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib> using namespace std;
const int MAXN = 1005;
typedef long long LL; int n,k,ans[1000005];
inline LL C(int x,int y){
if(x<y) return 0;
if(!y) return 0;if(x==y) return 1;
int lim=max(y,x-y),c=min(y,x-y);
LL ret=1;
for(register int i=x;i>=lim+1;i--)
ret=ret*i;
for(register int i=2;i<=c;i++)
ret=ret/i;
return ret;
} int main(){
scanf("%d%d",&n,&k);
if(n==1) {while(k--) putchar('1');putchar('\n');return 0;}
if(k==1) {putchar('1');n--;while(n--) putchar('0');putchar('\n');return 0;}
n--;int l=k+1;
while(C(l-1,k-1)<=n){
n-=C(l-1,k-1);l++;
}
ans[1]=1;int res=k-1;putchar('1');
for(register int i=2;i<=l;i++){
LL te=C(l-i,res);
if(n>te && res) {ans[i]=1;n-=te;res--;}
putchar(ans[i]+'0');
}putchar('\n');
return 0;
}

LUOGU P3048 [USACO12FEB]牛的IDCow IDs(组合数)的更多相关文章

  1. 洛谷P3048 [USACO12FEB]牛的IDCow IDs

    P3048 [USACO12FEB]牛的IDCow IDs 12通过 67提交 题目提供者lin_toto 标签USACO2012 难度普及/提高- 时空限制1s / 128MB 提交  讨论  题解 ...

  2. 洛谷 P3048 [USACO12FEB]牛的IDCow IDs

    题目描述 Being a secret computer geek, Farmer John labels all of his cows with binary numbers. However, ...

  3. [USACO12FEB]牛的IDCow IDs 一题多解(求二进制中有k个1 ,第n大的数)

    题目: FJ给他的奶牛用二进制进行编号,每个编号恰好包含K 个"1" (1 <= K <= 10),且必须是1开头.FJ按升序编号,第一个编号是由K个"1&q ...

  4. [USACO12FEB]牛的IDCow IDs

    题目描述 Being a secret computer geek, Farmer John labels all of his cows with binary numbers. However, ...

  5. 洛谷P3045 [USACO12FEB]牛券Cow Coupons

    P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB ...

  6. [USACO12FEB]牛券Cow Coupons(堆,贪心)

    [USACO12FEB]牛券Cow Coupons(堆,贪心) 题目描述 Farmer John needs new cows! There are N cows for sale (1 <= ...

  7. P3045 [USACO12FEB]牛券Cow Coupons

    P3045 [USACO12FEB]牛券Cow Coupons 贪心题.先选中 \(c_i\) 最小的 \(k\) 头牛,如果这样就超过 \(m\) ,直接退出,输出答案.否则考虑把后面的牛依次加入, ...

  8. LUOGU P3047 [USACO12FEB]附近的牛Nearby Cows

    传送门 解题思路 树形dp,看到数据范围应该能想到是O(nk)级别的算法,进而就可以设出dp状态,dp[x][j]表示以x为根的子树,距离它为i的点的总和,第一遍dp首先自底向上,dp出每个节点的子树 ...

  9. 【题解】Luogu p3047 [USACO12FEB]附近的牛Nearby Cows 树型dp

    题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into accoun ...

随机推荐

  1. drop,delete与truncate的区别

    drop直接删掉表 truncate删除表中数据,再插入时自增长id又从1开始 delete删除表中数据,可以加where字句. (1) DELETE语句执行删除的过程是每次从表中删除一行,并且同时将 ...

  2. bootstrap img自适应

    img 添加class名img-responsive适配屏幕

  3. TTreeView、TTreeNodes和TTreeNode

    TreeView是Delphi中使用频率比较高的一个控件,虽然使用次数很多,但总结不够.借着这次做GDW原型的机会总结一下,写的过程中也会参考网上的博文. TTreeView.TTreeNodes和T ...

  4. thinkphp 模型调试

    调试执行的SQL语句 在模型操作中 ,为了更好的查明错误,经常需要查看下最近使用的SQL语句,我们可以用getLastsql方法来输出上次执行的sql语句.例如: $User = M("Us ...

  5. post请求传文件

    public static JSONObject doFormDataPost(File file, String sURL) throws IOException { HttpClient cont ...

  6. csp-s模拟测试92

    csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...

  7. iOS7 AVAudioRecorder不能录音

    今天写录音代码的时候,在iOS7以下就可以录音,但是iOS7上不可以,后来才知道iOS7录音方式变了,加上下面的代码就可以了,bingo AVAudioSession *audioSession = ...

  8. Codeforces786B

    传送门 n个节点且固定起点最短路,三种加边方法 1.u->v, 边权为w:2. u->[l, r], 边权为w:3. [l, r]->u, 边权为w AC_Code #include ...

  9. 其它课程中的python---4、Matplotlib最最最最简单使用

    其它课程中的python---4.Matplotlib最最最最简单使用 一.总结 一句话总结: 慢慢来吧,不着急,心态平和和沉稳:每次和世界交互,你就能感受到无比的自信 1.如何区别python2和p ...

  10. 配置基于Devstack的嵌套KVM虚拟化

    本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...