ACM ICPC 3252 Round Numbers

端口数据转发工具 工具介绍:http://blog.youkuaiyun.com/btlong520/article/details/50251651 立即下载

欢迎前往个人博客 驽马点滴 和视频空间 哔哩哔哩-《挨踢日志》

 

【序言】刚刚开始学,想找些简单的题目入手,看到这题AC的人挺多,于是我也来做做这题。

【题目】

 

Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 4732 Accepted: 1607

 

Description

The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors', 'Ro, Sham, Bo', and a host of other names) in order to make arbitrary decisions such as who gets to be milked first. They can't even flip a coin because it's so hard to toss using hooves.

They have thus resorted to "round number" matching. The first cow picks an integer less than two billion. The second cow does the same. If the numbers are both "round numbers", the first cow wins,
otherwise the second cow wins.

A positive integer N is said to be a "round number" if the binary representation ofN has as many or more zeroes than it has ones. For example, the integer 9, when written in binary form, is 1001. 1001 has two zeroes and two ones; thus, 9 is a round number. The integer 26 is 11010 in binary; since it has two zeroes and three ones, it is not a round number.

Obviously, it takes cows a while to convert numbers to binary, so the winner takes a while to determine. Bessie wants to cheat and thinks she can do that if she knows how many "round numbers" are in a given range.

Help her by writing a program that tells how many round numbers appear in the inclusive range given by the input (1 ≤Start <Finish ≤ 2,000,000,000).

Input

Line 1: Two space-separated integers, respectively Start and Finish.

Output

Line 1: A single integer that is the count of round numbers in the inclusive range Start.. Finish

Sample Input

2 12

Sample Output

6

【思路】

1.首先的想法,就是输入一个数字n,能否令f(n)为那些≤n的"round numbers"的个数?那么题目就可以转化为f(Finish)-f(Start-1).

2.那么如何求这个f(n)?

           1)在求这个f(n)之前,先将n的二进制表达式求出来:(an)(an-1)...(a1)(a0). 当然这个an=1 (第一位是为1的)。后面以n=11,001,001为例做阐述(这是一个8位数)。

           2)个人希望分别找出a)<10,000,000、b)10,000,000~11,000,000、c)11,000,000~11,001,000、d)11,001,000~11,001,001、e)10,101,001之间(左开右闭)的"round numbers"数,那问题不就迎刃而解了吗?!

           3)而a)可以对应成一个7位的“0”“1”串X,XXX,XXX,每一位上任意取0或者1,满足count("0") >= count("1")的字符串的个数.这个为C(7,0)+C(7,1)+...+C(7,3).

这里稍作修改,a)对应成7位+首位是1的字符串;6位+首位是1的字符串;……;

                  b)可以对应成一个6位的“0”“1”串10,000,000+XXX,XXX,每一位上任意取0或者1,满足count("0") +1>= count("1")+1(前2位是10)的字符串的个数.这个为C(6,0)+C(6,1)+...+C(6,3).

                 c)d)类似,e)最后一位的情况特殊处理.

           4)于是需要一个函数用于解决这样的问题:一个k位的“0”“1”串XX...X,每一位上任意取0或者1,满足count("0")+ZeroNum >= count("1")+OneNum的字符串的个数。

于是定义一个函数用于解决这样的问题。

int tempFunction(int k, int ZeroNum, int OneNum)
{
	int temp = ((k+ZeroNum+1-OneNum)%2 == 0) ? ((k+ZeroNum+1-OneNum)/2) : ((k+ZeroNum-OneNum)/2+1);//set the upper bound for count("1")
	//return C(k,0)+C(k,1)+...+C(k,temp-1)
	int sum = 0;
	if (temp <= 0)
	{
		return 0;
	}
	for (int i = 0; i < temp; ++i)
	{
		//杨辉三角的值已计算
		sum = sum + YangHuiTriangle[(k-1)*k/2+i-1];
	}
	return sum;
}

 

其中杨辉三角的值可以用递推公式计算

 

 

void InitialYangHuiTriangle(int *TriangleArray, int n)//n是组合数的一个参数,对应杨辉三角的时候,行数多1.
{
	for (int i = 1; i <= n+1; ++i)
	{
		for (int j = 1; j <= i; ++j)
		{
			if ((j == 1) || (j == i) || (i == 1))
			{
				TriangleArray[(i-1)*i/2+j-1] = 1;
			}
			else
			{
				TriangleArray[(i-1)*i/2+j-1] = TriangleArray[(i-2)*(i-1)/2+j-2] + TriangleArray[(i-2)*(i-1)/2+j-1];
			}
		}
	}
}

 

 

综合以上的叙述,得到的如下程序:

 

 

【程序】

#include<iostream>
using namespace std;

int YangHuiTriangle[(1+25)*25/2];
int SummateArray(int Array[], int n);
void InitialYangHuiTriangle(int *TriangleArray, int n);
int tempFunction(int, int, int);
int RoundNumber(int);
int main()
{
	int StartNum;
	int FinishNum;
	cin >> StartNum  >> FinishNum;
	
	InitialYangHuiTriangle(YangHuiTriangle, 24);
	cout << RoundNumber(FinishNum)-RoundNumber(StartNum-1)<<endl;
	return 0;
}
/*****************************************************************************
*int RoundNumber(int aNumber)
*函数作用:函数用来计算小于等于aNumber的"round number"的个数
*函数输入:十进制整数aNumber (0 <= aNumber <= 20,000,000)
*函数输出:小于等于aNumber的"round number"的个数
*函数备注:暂无
*****************************************************************************/
int RoundNumber(int aNumber)
{
	int countNumber = 0;
	if ((aNumber == 0)||(aNumber == 1))
	{
		return 0;
	}

	int BinaryNumber[24];
	int location = 0;

	while (aNumber != 1)
	{
		BinaryNumber[location] = aNumber%2;
		location = location + 1;
		aNumber = aNumber/2;
	}
	BinaryNumber[location] = 1;
	//这样就将十进制整数转化为二进制表现形式,倒叙放在数组BinaryNumber[24]中

	//接下来是判断1的位置
	int tempFirst1=location-1;
	while(tempFirst1 > 0)
	{
		countNumber += tempFunction(tempFirst1,0,1);
		--tempFirst1;
	}
	int next = location - 1;//已经知道了location(>=1)对应的位置是1了,用next 用以记录下一个1的位置
	int pre = location;
	while (next >= 0)
	{
		if(next == 0)//此时表明这是最后一位
		{
			if(BinaryNumber[next] == 1)//此时pre的位置为1,next的位置也为1
			{
				countNumber += tempFunction(next, pre-next, 1);
				next -= 1;
			}
			else//表明这个数就是aNumber的二进制表达式,只需要验证该数是否为round number 即可
			{
				if (2*SummateArray(BinaryNumber, location+1) <= (location + 1))
				{
					countNumber += 1;
				}
				next -= 1;
			}
		}
		else
		{
			if(BinaryNumber[next] == 1)//此时pre的位置为1,next的位置也为1
			{
				countNumber += tempFunction(next, pre-next, 1);
				pre = next;
				next -= 1;
			}
			else
			{
				next -= 1;
			}
		}
	}
	return countNumber;
}

int tempFunction(int k, int ZeroNum, int OneNum)
{
	if ( k==0 )
	{
		return 0;
	}
	int temp = ((k+ZeroNum+1-OneNum)%2 == 0) ? ((k+ZeroNum+1-OneNum)/2) : ((k+ZeroNum-OneNum)/2+1);//set the upper bound for count("1")
	//return C(k,0)+C(k,1)+...+C(k,temp-1)
	int sum = 0;
	if (temp <= 0)
	{
		return 0;
	}
	for (int i = 0; i < temp; ++i)
	{
		//杨辉三角的值已计算
		sum = sum + YangHuiTriangle[k*(k+1)/2+i];
	}
	return sum;
}

void InitialYangHuiTriangle(int *TriangleArray, int n)//n是组合数的一个参数,对应杨辉三角的时候,行数多1.
{
	for (int i = 1; i <= n+1; ++i)
	{
		for (int j = 1; j <= i; ++j)
		{
			if ((j == 1) || (j == i) || (i == 1))
			{
				TriangleArray[(i-1)*i/2+j-1] = 1;
			}
			else
			{
				TriangleArray[(i-1)*i/2+j-1] = TriangleArray[(i-2)*(i-1)/2+j-2] + TriangleArray[(i-2)*(i-1)/2+j-1];
			}
		}
	}
}



/*****************************************************************************
*int SummateArray(int Array[], int n)
*函数作用:函数用来计算数组的所有元素的和
*函数输入:长度为n的数组Array
*函数输出:数组元素的和
*函数备注:暂无
*****************************************************************************/
int SummateArray(int Array[], int n)
{
	int sum = 0;
	for (int i = 0; i < n; ++i)
	{
		sum = sum + Array[i];
	}
	return sum;
}


【结果】 Runtime Error

 

【修改】 待续

这是从网上搜索来的,发现思路类似,但是本人的比较拙劣

 

#include<iostream>
using namespace std;
int C[33][33];
int MAX[33];
int B[33];
int tobinary(int b)
{
	int i=1;
	while(b) 
	{  
		B[i++]=b%2; 
		b/=2;
	} 
	return i-1;
}
void init()
{ 
	int i,j;
	C[1][0]=C[1][1]=1;
	for(i=2;i<=32;i++)
	{ 
		C[i][0]=1; 
		for(j=1;j<=i;j++) 
			C[i][j]=C[i-1][j]+C[i-1][j-1]; 
	}
	MAX[1]=0; 
	for(i=2;i<=32;i++) 
	{
		for(j=(i+1)/2;j<i;j++) 
			MAX[i]+=C[i-1][j]; 
	}
}
int howmany(int n,int k,int *p) 
{
	if(k>=n||k<0) 
		return 0; 
	if((n==1&&k==0)||(n==2&&k==1)) 
		return 1; 
	if(p[n-1]==0) 
		return howmany(n-1,k-1,p);
	else
		return C[n-2][k-1]+howmany(n-1,k,p);
}
int compute(int n)
{
	int i,ans=0;
	int len=tobinary(n);
	for(i=(len+1)/2;i<len;i++)
		ans+=howmany(len,i,B);
	for(i=1;i<len;i++)
		ans+=MAX[i];
	return ans;
}
int main()
{ 
	init(); 
	int start,finish;
	cin >> start >> finish; 
	cout<<compute(finish)-compute(start-1)<<endl;
	return 0;
}

欢迎前往个人博客 [驽马点滴](https://numas.ltd)

 

 

 

 

 

 

 

 

 

YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip 附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。 立即下载

相关推荐

企业级AI助手平台 开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模式、RAG技术和流程编排能力 支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化

企业级AI应用开发框架,支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化能力,提供可视化流程编排、自主决策智能体与多智能体协同调度,兼容主流 Agent Skill 协议,帮助企业与开发者零门槛快速构建安全、高效、可落地的AI智能体应用与行业解决方案。

poj3252-Round Number 组合数学

思路基本上就是组合计数,唯一特别需要注意的是在计算组合数的时候很容易越界,虽然上面分析了计算结果在int范围内是没有问题的,但是计算组合数中间过程还是很可能越界,所以这里要特别注意。解决方法是利用C(n,m)=C(n-1,m-1)+C(n-1,m)进行递归计算,而不是使用传统的乘法计算方式。为了更有效率一点,可以事先计算好n=1~32,m=1~32的组合数的结果然后存起来。

smartxxyx的专栏 2041

java复赛编程答案(代码)

绝对真实的itat java复赛编程答案(代码),已经上机调试成功。有第三界和第五界的复赛代码。

2020.10.06 训练赛补题

The 2019 ICPC Asia Hong Kong Regional Contest E. Erasing Numbers J. Junior Mathematician

qq_45812711的博客 275

Figma到Axure一键转换:Axhub Extension保姆级教程(含常见问题解决)

本文提供Axhub Extension的保姆级教程,详细讲解如何将Figma设计稿一键转换为Axure高保真交互原型。教程涵盖环境准备、核心转换四步走流程,并重点解决JSON导入失败、样式错乱、复杂组件转换等常见问题,旨在打通Figma与Axure之间的数据孤岛,大幅提升设计师和产品经理的原型制作效率。

night的博客 1575

使用OpenTK展示3D点云图像(C#)

图中存在一个空的点,可通过阈值分割过滤掉,然后如何保证某个点必然存在后面两个和它构成三角形的点,用一个2x2的结构元腐蚀阈值分割出的区域,得到剩下所有的点必然每个点可以构成三角形,这种得到三角形的算法效率会非常高。然后还有光照,无光照和有光照效果差异很大,处理光照核心在于得到每个点的法向量,用上面的三角形的两条边构成的向量叉乘,及得到这个点的法向量,输入给着色器处理得到光照的渲染效果,如下面两张图对比。我们需要把点连成面,有很多算法可以实现,但我拿到的图为一张tif格式16位的深度图,如下图。

海盗Isaac 2283

POJ 3252 Round Numbers (组合数学)

The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors', 'Ro, Sham, Bo', and a host of other names) in order to make

AI蜗牛之家 1210

利用setEcoMode优化innovus中的ecoAddRepeater批量操作效率

本文详细介绍了在Cadence Innovus工具中,如何利用setEcoMode命令的batchMode参数,显著提升ecoAddRepeater命令在批量插入buffer或inverter时的操作效率。通过合并重复的初始化和数据库更新开销,该模式可将大规模时序修复操作的执行速度提升数倍,并提供了完整的脚本示例与最佳实践,帮助后端设计工程师优化ECO流程。

mango的博客 511

数位DP(组合数打表)—— Round Numbers ( POJ 3252 )

题目链接: http://poj.org/problem?id=3252 分析: 求出S~F中转换成二进制数后0的个数≥1的个数的数字的个数。0的个数大于1的个数的数可以用组合数来做。 题解:算出1~F+1和1~S的满足条件的个数相减即可。 先一个数转换乘二进制形式存入数组中: void change(int n) { number[0]=0; //nubmer[0]用来

FeBr2的博客 549

InSAR_ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场

ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场 ISCE软件做干涉只需要将数据准备好,并配置好insarApp.xml文件即可进行。 一、数据准备 1、SAR数据获取 本利中使用的数据为欧空局提供的sentinel-1A/B数据,可从阿拉斯加数据服务器上下载,具体下载方法可参考: 哨兵数据下载方法. 2、哨兵卫星轨道文件下载 哨兵数据处理除了需要SAR影像外,还需提供轨道参数文件,可从https://qc.sentinel1.eo.esa.int/aux_poeorb/下载。下载

weixin_42128764的博客 1万+

Autowired的使用介绍

我们都知道在spring中@Autowired注解,是用来自动装配对象的。@Service@Autowired没错,这样是能够装配成功的,因为默认情况下spring是按照类型装配的,也就是我们所说的byType方式。此外,@Autowired注解的required。

白话机器学习 1349

Round Numbers(组合数学)

Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10484 Accepted: 3831 Description The cows, as you know, have no fingers or thumbs and thus are unable...

weixin_30374009的博客 159

手把手教你排查Abaqus中的Johnson-Cook损伤参数:避免因d3正负号导致的仿真失败

本文详细解析了Abaqus中Johnson-Cook损伤参数d3正负号设置的关键问题,帮助用户避免因参数错误导致的仿真失败和Excessive distortion报错。通过对比不同文献定义、提供实操指南和典型错误排查流程,有效提升非线性分析的准确性和效率。

weixin_33960567的博客 353

gym102452E Erasing Numbers 2019ICPC香港现场赛

https://codeforces.com/gym/102452/problem/E 这题挺可做的,然而我在J上花了太长的时间,背大锅 选连续的3个数字删中位数或者是删大的和小的留中位数,感觉这种题从去年到今年出过很多次了,基本都是吧当前数字当标准,然后把比他小的全当0,比他大的全当1,然后去做。 这题我们枚举每个数字,然后O(n)判断他是否最后可以留下 他能留下的充要条件是最后只剩01X,0X1,1X0,10X,X01,X10这6种形式,那么其实就是能否删一些数字使得0和1的数量一样,只要01和

binarycopycode 809

【CANoe】CANoe的 I/O功能-以VN1640A为例

Canoe的 I/O功能-以VN1640A为例

星Yeah 的博客 7869

用业务语义织就企业数据之网:SAP Datasphere 的定位、架构与落地场景全解析

SAP Datasphere作为SAP业务数据云的核心组件,通过语义层整合企业内外部数据,支持实时分析与AI应用。其核心功能包括数据集成、语义建模、虚拟化与仓库能力,通过Spaces实现资源隔离,Data Builder和Business Builder分别面向技术和业务建模。该平台与SAP HANA Cloud、SAC等深度集成,支持财务统一分析、供应链可视化等典型场景,并可通过BW bridge实现传统BW资产云化迁移。Datasphere强调开放互联,能与Databricks等生态伙伴协同,为企业提供

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1362

POJ3252:Round Numbers(数位DP+记忆化DFS)

Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors', 'Ro, Sham, Bo', and a host of other names) i

ACM!荣耀之路! 6149

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Educational Codeforces Round 80 (Rated for Div. 2) E. Messenger Simulator

E. Messenger Simulator 传送门 #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; template<class T> using ordered_set ...

king9666的博客 287

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

输出2-n的所有素数

欢迎前往个人博客驽马点滴和视频空间 哔哩哔哩-《挨踢日志》 有这么几个方法: 1.对于2-n的每一个数,判断是否为素数,是则输出。 ——判断k是否为素数的时候得从 2 到 (int)(sqrt(k))遍历,算法通俗易懂 void OutputAllPrimeNum( int n ) { for(int i = 2; i <= n; ++i) { int t = (int...

humanxing的专栏 3930

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

1-N个数随机去掉两个数,遍历一次把这两个数找出来

欢迎前往个人博客驽马点滴和视频空间 哔哩哔哩-《挨踢日志》 学习算法,把一些简单的问题写一写,做一做 【题目】:1- n这n个数随机减少两个数后,放在A[]中(打乱顺序),以时间复杂度为O(n)的算法找到减少的这2个数 【思路】:如果是减少1个数,那么大家都知道方法——循环一次,求A[]的和sum以及(1+2+...+n)=SUM,然后用SUM-sum就能得到结果。可是,现在出现...

humanxing的专栏 3311

机器人走步问题

欢迎前往个人博客驽马点滴和视频空间 哔哩哔哩-《挨踢日志》 问题详述:一个机器人每步随机走1米或2米,求机器人走n米的方法数MethodNum(n),并列出所有的走法。 个人思考: 1.实际上MethodNum(n)=fibonacci(n+1),用数学归纳法也可证明,或者可以考虑机器人走的第一步:若是第一步走1米,走完剩下n-1米的方法数为Method(n-1);若是第一步走2米...

humanxing的专栏 2322

ACM ICPC 1045 Bode Plot

欢迎前往个人博客驽马点滴和视频空间 哔哩哔哩-《挨踢日志》 Bode Plot Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9155 Accepted: 6067 Description Consider the AC circuit below. We will assume that ...

humanxing的专栏 897

KMP算法

欢迎前往个人博客驽马点滴和视频空间 哔哩哔哩-《挨踢日志》 先引几篇看过的文章: http://blog.youkuaiyun.com/v_july_v/article/details/6545192 http://blog.youkuaiyun.com/v_july_v/article/details/7041827 http://www.ruanyifeng.com/blog/20...

humanxing的专栏 810

ACM ICPC 1163 The Triangle

欢迎前往个人博客驽马点滴和视频空间 哔哩哔哩-《挨踢日志》 Description 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1) Figure 1 shows a number triangle. Write a program that calculates the highest sum of nu...

humanxing的专栏 677

【Linux 命令实战(04):文件内容查看,掌握 cat、less、head、tail】

cat:快速查看文件内容。less:分页浏览文件,支持搜索。head:查看文件开头。tail:查看文件末尾,支持实时跟踪。其中,tail -f是我建议大家重点掌握的命令。在自动化测试工作中,很多时候我们不需要等整个任务结束才分析结果。通过实时跟踪日志,就可以观察程序执行过程,及时发现接口异常、数据库连接失败等问题。当然,本篇还只是文件内容查看的基础。后面我们会继续学习如何从大量日志中筛选关键词、统计错误数量、定位异常记录。

一些微不足道的见解、希望能帮助各位 186
上一篇: 1-N个数随机去掉两个数,遍历一次把这两个数找出来
下一篇: ACM ICPC 1163 The Triangle
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值