USACO section 3.2 Stringsobits(组合数学)

【Codex Sandbox 与审批机制:小白也能看懂的实用教程】 这篇教程介绍了Codex工具中的沙盒(Sandbox)和审批(Approvals)机制,帮助用户安全高效地使用Codex协作。沙盒限制Codex访问范围,审批机制则控制敏感操作权限。文章详细讲解了五种常见模式:最安全的安全只读浏览、只读非交互、仓库内编辑、Auto预设和不推荐的YOLO模式。还提供了新手使用路径建议、配置示例和实战场景范式,包括如何测试沙盒行为、不同系统下的实现方式以及常见问题解答。最后附上速查清单,帮助用户快速选择合适的权限组合。 阅读详情
Stringsobits
Kim Schrijvers

Consider an ordered set S of strings of N (1 <= N <= 31) bits. Bits, of course, are either 0 or 1.

This set of strings is interesting because it is ordered and contains all possible strings of length N that have L (1 <= L <= N) or fewer bits that are `1'.

Your task is to read a number I (1 <= I <= sizeof(S)) from the input and print the Ith element of the ordered set for N bits with no more than L bits that are `1'.

PROGRAM NAME: kimbits

INPUT FORMAT

A single line with three space separated integers: N, L, and I.

SAMPLE INPUT (file kimbits.in)

5 3 19

OUTPUT FORMAT

A single line containing the integer that represents the Ith element from the order set, as described.

SAMPLE OUTPUT (file kimbits.out)

10011

思路:用组合做,如原题的5 3 19 那10011怎么来的呢, 也就说有5个位,你可以选3个是1,2个是1,1个是1不选1总情况数为26种而19<26,那看下一位,即是

           4位里选3位(即是假设输入是 4 3 19)那就是有4位可选3个1,2个1,1个1,0个1总情况数为19>15说明4位装不下,不到19个那么第5位一定得是1,

            即是1xxxx(x代表未知)假设m为输入的I,m原先等于19,当第5位确定为1后m=m-15=4;那原题转化为求4 2 4的输出只要求出4 2 4的输出,也就是求1xxxx

           后面的四个x;同样的3位可选2个1,1个1,0个1 有7>4;也就是说3位可以装的下那第四位就为0,原题转化为求3, 2 4的输出即是求10XXX后面的三个未知数,重复操作

           直到m化为0,得到结果。

注意点:31位,貌似int存会出错,C(n,m)=C(n,m-1)+C(n-1,m-1);dp(n,m)=C(n,m)+dp(n-1,m);

 

/*
ID:nealgav1
LANG:C++
PROG:kimbits
*/
#include<fstream>
using namespace std;
ifstream cin("kimbits.in");
ofstream cout("kimbits.out");
long long cc[55][55];///组合算C(n,m);m里取n
long long dp[55][55];///算dp(n,m)=C(n,m)+C(n-1,m)+...+C(0,m);
char s[55];///存2进制答案
long long C(int aa,int bb)
{
  cc[0][0]=1;dp[0][0]=1;
  for(int i=1;i<=bb;i++)
  { cc[0][i]=1;dp[0][i]=1;
   for(int j=1;j<=i;j++)
   {cc[j][i]=cc[j][i-1]+cc[j-1][i-1];
    dp[j][i]=cc[j][i]+dp[j-1][i];
   }
 }
}
int main()
{
  int b,a;
  long long m;
  cin>>b>>a>>m;
  s[b]='\0';
  C(a+1,b+1);
  int j;
  for(int i=b;i>=0;i--)
  { if(i>a)j=a;
    else j=i;
    if(m>0)
    {    ///当i为不够放时i+1位为1,同时减去i位能存量
      if(dp[j][i]<m){m-=dp[j][i];s[b-i-1]='1';a--;}
      else s[b-i-1]='0';
    }
    else s[b-i-1]='0';
  }
  //if(m)s[b-1]='1';
  cout<<s<<endl;
}


 

 

 

USER: Neal Gavin Gavin [nealgav1]
TASK: kimbits
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 3404 KB]
   Test 2: TEST OK [0.000 secs, 3404 KB]
   Test 3: TEST OK [0.000 secs, 3404 KB]
   Test 4: TEST OK [0.000 secs, 3404 KB]
   Test 5: TEST OK [0.000 secs, 3404 KB]
   Test 6: TEST OK [0.000 secs, 3404 KB]
   Test 7: TEST OK [0.000 secs, 3404 KB]
   Test 8: TEST OK [0.000 secs, 3404 KB]
   Test 9: TEST OK [0.000 secs, 3404 KB]
   Test 10: TEST OK [0.000 secs, 3404 KB]
   Test 11: TEST OK [0.000 secs, 3404 KB]
   Test 12: TEST OK [0.000 secs, 3404 KB]
   Test 13: TEST OK [0.000 secs, 3404 KB]

All tests OK.

Your program ('kimbits') produced all correct answers! This is your submission #3 for this problem. Congratulations!

Here are the test data inputs:

------- test 1 ----
4 2 1
------- test 2 ----
1 1 2
------- test 3 ----
8 4 30
------- test 4 ----
10 2 56
------- test 5 ----
7 7 64
------- test 6 ----
18 3 300
------- test 7 ----
21 10 1048576
------- test 8 ----
24 20 12936478
------- test 9 ----
31 24 10000000
------- test 10 ----
31 31 2147483648
------- test 11 ----
31 26 12345678
------- test 12 ----
31 26 123456789
------- test 13 ----
31 26 1234567890
Keep up the good work!
Stringsobits
Russ Cox

Suppose we knew how to calculate the size of the set of binary numbers for a given nbits and nones. That is, suppose we have a function sizeofset(n, m) that returns the number of n-bit binary numbers that have at most m ones in them.

Then we can solve the problem as follows. We're looking for the ith element in the set of size n with m bits. This set has two parts: the numbers the start with zero, and the numbers that start with one. There are sizeofset(n-1, m) numbers that start with zero and have at most m one bits, and there are sizeofset(n-1, m-1) numbers that start with one and have at most m one bits.

So if the index is less than sizeofset(n-1, m), the number in question occurs in the part of the set that is numbers that start with zero. Otherwise, it starts with a one.

This lends itself to a nice recursive solution, implemented by "printbits".

The only difficult part left is calculating "sizeofset". We can do this by dynamic programming using the property described above:

	sizeofset(n, m) = sizeofset(n-1, m) + sizeofset(n-1, m-1)

and sizeofset(0, m) = 1 for all m. We use double's throughout for bits, but that's overkill given the rewritten problem that requires only 31 bits intead of 32.

/*
PROG: kimbits
ID: rsc001
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

FILE *fout;

/* calculate binomial coefficient (n choose k) */
double sizeofset[33][33];

void
initsizeofset(void)
{
	int i, j;

	for(j=0; j<=32; j++)
		sizeofset[0][j] = 1;

	for(i=1; i<=32; i++)
	for(j=0; j<=32; j++)
		if(j == 0)
			sizeofset[i][j] = 1;
		else
			sizeofset[i][j] = sizeofset[i-1][j-1] + sizeofset[i-1][j];
}

void
printbits(int nbits, int nones, double index)
{
	double s;

	if(nbits == 0)
		return;

	s = sizeofset[nbits-1][nones];
	if(s <= index) {
		fprintf(fout, "1");
		printbits(nbits-1, nones-1, index-s);
	} else {
		fprintf(fout, "0");
		printbits(nbits-1, nones, index);
	}
}

void
main(void)
{
	FILE *fin;
	int nbits, nones;
	double index;

	fin = fopen("kimbits.in", "r");
	fout = fopen("kimbits.out", "w");
	assert(fin != NULL && fout != NULL);

	initsizeofset();
	fscanf(fin, "%d %d %lf", &nbits, &nones, &index);
	printbits(nbits, nones, index-1);
	fprintf(fout, "\n");

	exit(0);
}

 

快速玩转 Llama2!机器学习 PAI 最佳实践(一)—低代码 Lora 微调及部署 本实践将采用阿里云机器学习平台PAI-快速开始模块针对 Llama-2-7b-chat 进行开发。PAI-快速开始支持基于开源模型的低代码训练、布署和推理全流程,适合想要快速开箱体验预训练模型的开发者。 阅读详情

相关推荐

变压器耦合放大器(低频应用+高频应用)

变压器耦合放大器(低频应用+高频应用)

m0_54943120的博客 2275

[USACO]String sobits_01串

【USACO题库】3.2.2 Stringsobits__01串 (Standard IO) 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 考虑排好序的N(N<=31)位二进制数。你会发现,这很有趣。因为他们是排列好的,而且包含所有可能的长度为N且含有1的个数小于等于L(L<=N)的数。你的任务是输出第I(1<=I<=长度为N的二进制数的个数)大的,长度为N,且含有1

EasternCountry的博客 552

大陆毫米波雷达ARS408-21xx实战:从零搭建ROS环境下的目标检测与可视化

本文详细介绍了大陆毫米波雷达ARS408-21xx在ROS环境下的实战部署全流程。从硬件连接、CAN总线配置,到ROS驱动节点开发、CAN报文解析,再到RViz三维可视化实现,提供了完整的代码示例与调试技巧,帮助开发者快速搭建毫米波雷达目标检测与可视化系统。

open4的博客 633

[USACO]Stringsobits

题意:问你长度为n的二进制数,其中1的个数 <= k 的第 m 大的数是多少 解题思路:这种题目都可以用递归的思路来解决。从高位到低位开始枚举(枚举如果这一位是1,看最多有多少种情况。是否大于当前的m) 解题代码: 1 // File Name: kimbits.c 2 // Author: darkdream 3 // Created Time: 2014年02月2...

weixin_30933531的博客 143

微信聊天记录丢失原因与恢复方案详解

SQLite数据库作为移动应用常见的本地存储方案,其加密机制和存储结构直接影响数据安全性。以微信为例,聊天记录存储在EnMicroMsg.db等SQLite文件中,采用AES加密保护。当手机清理工具误删这些文件时,会导致特定时间段记录丢失。理解数据恢复原理需要掌握文件系统删除机制和闪存特性,其中关键点包括TRIM指令的影响和数据块覆盖风险。通过专业工具如DiskDigger或iMyFone D-Back,配合ADB调试和SQLite数据重组技术,可在黄金时间窗口内恢复记录。日常维护建议结合自动化备份方案和存

weixin_32612263的博客 386

吉林大学软件工程章节测验 第九章 答案+解析

4.【判断题】估算软件规模有代码行技术和功能点技术两种方法,其中代码行方法估计实现一个功能所需要的源程序行数,其不依赖项目所使用的开发语言,并且具有较好的直观性。3.【单选题】软件项目估算时,若计划人员对每个功能分别按最佳的、可能的、悲观的三种情况给出功能点估计值,记作a, m, b,则估算的期望值E的公式为( )。8.【判断题】在工程网络图中,如果在由起始事件至终止事件所构成的一条路径上,所有事件的最早时刻都和最迟时刻都相同,那么这条路径就是关键路径。4.【单选题】配置管理贯穿软件开发的整个过程。

m0_51459931的博客 1427

usaco Stringsobits

dp好理解,下面的输出第i打个数是在太巧妙了。dp[i][j]表示i位上1个数少于j的个数。假设求第t大的数。当t>dp[i-1][j]的时候,假如第i位是0后面怎么凑都出凑不到t个出来。如果第i位是1他肯定比第i位时0的dp[i-1][j]个数大所以我们只要再找t-dp[i][j]大的数就可以了以此类推/* ID: jinbo wu LANG:C++ TASK:kimbits */ #inclu

silence401的博客 354

工业级实战:C#上位机集成YOLO实现多目标跟踪(含数据库存储+报表导出)

推理核心:ONNX Runtime实现C#直接推理YOLO模型,GPU优先+CPU降级适配工业机;跟踪核心:SORT算法轻量级实现多目标跟踪,保证工业场景实时性与稳定性;数据核心:MySQL存储+本地缓存,Excel报表标准化导出,满足工业数据追溯与质检需求;部署核心:模型优化、GPU加速、开机自启,保证工业级7x24小时运行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 474

【USACO题库】3.2.2 Stringsobits__01串

【题目】 考虑排好序的N(N&lt;=31)位二进制数。 你会发现,这很有趣。因为他们是排列好的,而且包含所有可能的长度为N且含有1的个数小于等于L(L&lt;=N)的数。 你的任务是输出第I(1&lt;=I&lt;=长度为N的二进制数的个数)大的,长度为N,且含有1的个数小于等于L的那个二进制数。【样例】 输入:5 3 19 输出:10011这一道题是比较简单的“淼”题,是真的“淼”吗?不!不可能,就算是水题那也是有很多

Larry1118的博客 828

大数据分析案例-基于随机森林算法构建二手房价格预测模型

通过应用随机森林算法,我们希望建立一个能够有效预测二手房价格的模型。这个模型可以基于各种因素,如区域位置、房屋属性、市场供需等,来预测未来某一时间点的房价。通过提高预测准确性,我们可以更好地把握房地产市场动态,为决策提供更有价值的参考。揭示影响二手房价格的因素及其影响方式:通过分析随机森林算法生成的模型,我们可以进一步了解哪些因素对二手房价格有重要影响,以及这些因素如何影响房价。这有助于我们深入理解房地产市场的运行规律,为制定更为有效的市场策略提供依据。

m0_64336780的博客 1万+

无刷电机里的霍尔传感器,和 AS5600 编码器到底有什么区别?

摘要: 无刷电机中的霍尔传感器主要用于换相控制,提供6种状态反馈,无法实现精确角度测量。与AS5600磁编码器(分辨率4096)相比,霍尔仅能确保电机“转得对”,而编码器则用于高精度角度反馈。在机器人等需要位置闭环的场景中,两者需协同使用:霍尔负责基础换相,编码器提供精确角度控制。简单应用中可仅用霍尔,但高精度定位必须搭配编码器。

qq_45430571的博客 242

USACO Stringsobits 解题报告

可以直接移步这里:大神的代码http://belbesy.wordpress.com/2012/08/13/usaco-3-2-2-stringsobits/ 这道题让求第I个N位数,要求这些数的二进制表达中1的个数小于L。 刚开始用暴力解法,从1开始递增,算每个数的二进制表达中1的个数,并计数。不出所料地通不过后面的大测试点。即使用了快速计算二进制中1的个数的方法(见代码)。 在看了大神的

thestoryofsnow的专栏 1442

基于Matlab的轨迹分析行为识别

本文将介绍基于Matlab的轨迹分析行为识别方法,并提供相应的源代码。在轨迹特征提取完成后,我们需要通过对于某一时间窗口内的轨迹特征进行聚合和分析,得到相应的行为特征。轨迹分析作为一种简单有效的行为识别方法,在实际应用中得到了广泛的应用。本文介绍了一种基于Matlab的轨迹分析行为识别方法,并提供相应的源代码作为参考。轨迹分析是指对于一定时间内某个对象在空间中运动的路径进行跟踪和分析的方法。在行为识别中,我们可以通过对于轨迹进行特征提取和分析,进而得到该对象的运动模式和行为特征。二、轨迹分析行为识别流程。

DevProPlus的博客 885

USACO Section 3.2 Stringsobits(dp)

StringsobitsKim Schrijvers Consider an ordered set S of strings of N (1 <= N <= 31) bits. Bits, of course, are either 0 or 1. This set of strings is interesting because it is ordered and ...

angtongyou1893的博客 212

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

USACO Training Section 3.2 Stringsobits

[url="http://ace.delos.com/usacoprob2?a=LL9wfbIBeVe&S=kimbits"]英文原题[/url] [url="http://www.wzoi.org/usaco/12%5C505.asp"]中文题译[/url] 大意:求至多有L个1的第i个N位二进制数(1 n_th ; yanghui_tri(n_bit+1); int bi...

山中竹笋 211

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

USACO-Section 3.2 Stringsobits(DP)

dp[i][j]表示长度为i的二进制数中含有1的个数不超过j的个数 则状态转移方程为:dp[i][j]=dp[i-1][j-1]+dp[i-1][j]; 边界条件是:dp[i][0]=dp[0][i]=1 由于dp[0][0]=dp[0][1]=…=dp[0][l]=1,则dp[1][1]=dp[0][0]+dp[0][1]=2,dp[1][2]=…=dp[1][l]=2,从而当j>i时,dp[i][j]=dp[i][i]=dp[i-1][j-1]*2; 判断第n位的数字时:若dp[n-1][l]<m,则

idealism_xxm的专栏 573

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

USACO-Section3.2 Stringsobits【递归】

题目描述: 考虑排好序的N(N&lt;=31)位二进制数。 你会发现,这很有趣。因为他们是排列好的,而且包含所有长度为N且这个二进制数中1的位数的个数小于等于L(L&lt;=N)的数。 你的任务是输出第i(1&lt;=i&lt;=长度为N的二进制数的个数)小的(注:题目这里表述不清,实际是,从最小的往大的数,数到第i个符合条件的,这个意思),长度为N,且1的位数的个数小于等于L的那个二进制数...

tjj1998的博客 344

USACO-Section 3.2-PROB Stringsobits

Stringsobits Kim Schrijvers Consider an ordered set S of strings of N (1 This set of strings is interesting because it is ordered and contains all possible strings of length N that have L (1 You

So You Try 425

usaco Chapter 3 section 3.2 Stringsobits

/*ID: niepeng1LANG: C++TASK:kimbits*//*StringsobitsKim Schrijvers Consider an ordered set S of strings of N (1 This set of strings is interesting because it is ordered and contains all possible stri

china1000的专栏 488

usaco-Section 3.2-Stringsobits

StringsobitsKim Schrijvers Consider an ordered set S of strings of N (1 <= N <= 31) bits. Bits, of course, are either 0 or 1. This set of strings is interesting because it is ordered and conta...

weixin_30765319的博客 117

[USACO Section 3.2] 01串 Stringsobits (动态规划)

题目链接 Solution 贼有意思的 DP, 也可以用组合数学做. \(f[i][j]\) 代表前 \(i\) 位,有 \(j\) 个 \(1\) 的方案数. 转移方程很简单 : \(f[i][j]=f[i-1][j]+f[i-1][j-1]\) 然后可以按位判断答案上是否为 \(1\) . 如何判断? 如果当前 \(f[i][L]\) 小于 \(I\) ,那么我们所要的方案一定 \(i\) ...

weixin_30872157的博客 163

USACO--3.1Stringsobits

开始的时候暴力了一次,但是在第10个点就超时了.后面才知道这个题实际上是一个组合数的题目.在每个位置我们可以选择放0或者1,并且我们可以统计出每种放法后面数的排列数,然后我们可以决定放0或放1,继续这个过程直到最后. 所以重点是计算出dp[i][j],表示i位中至多有j位1.对这个我们可以采用dp的方法来求dp[i][j]=dp[i-1][j]+dp[i-1][j-1]; 也可以使用组合数来求d

荒野孤鹰 741

USACO Stringsobits

不是特别好想的一道题,首先

jinjiahao5299的专栏 543

【动态规划】【USACO】Stringsobits

<br /> <br />Consider an ordered set S of strings of N (1 <= N <= 31) bits. Bits, of course, are either 0 or 1.<br />This set of strings is interesting because it is ordered and contains all possible strings of length N that have L (1 <= L <= N) or fewer b

liveas的专栏 2029

usaco3.2.2 Stringsobits

一 原题 Stringsobits Kim Schrijvers Consider an ordered set S of strings of N (1 This set of strings is interesting because it is ordered and contains all possible strings of length N that have L

max_kibble的博客 362

USACO Stringsobits, 还是得搬出动态规划来

这题证明俺现在真是老了,退步了,这是第一份代码: #include using namespace std;   ifstream fin("kimbits.in"); ofstream fout("kimbits.out");   unsigned int N, L, pos;   int mai

左手为你画情 2795
上一篇: USACO section 3.2 Factorials(dp)
下一篇: ZOJ 1004 Anagrams by Stack(dfs堆栈)
剑不飞
博客等级 码龄15年 86粉丝 505原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值