换抵挡装置(按位运算符的运用)

2023-11-30 22:12

本文主要是介绍换抵挡装置(按位运算符的运用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给出两个长度分别为n1,n2(n1 + n2 <=32)且每列高度只为1或2的长条(保证高度为1的地方水平上一致)。需要将它们放入一个高度为3的容器长度,问能够容纳它们的最短容器长度

用手画的

本来是n1,n2 <= 100的,但是我想用一下按位运算符,就稍微改了一下题目

也可以数组模拟,这样可以满足原本的条件

输入格式:

第一行为两个整数,代表n1,n2

第二行有n1个数,为1或者2,代表列高

第三行有n2个数,为1或者2,代表列高

输出格式:

一个整数,代表最短容器长度

(注意:输入时长条的最下层是填满的,即如果要组装,需要将其中一个长条反转。且长条可以左右翻转(那前一句就没影响了,反正都要试一下))

代码如下:

#include<stdio.h>
int input(int length);
int roll(int l, int length);
int getmin(int l1, int l2, int n1, int n2);int main(void)
{int n1, n2, min = 0, tmp;scanf("%d%d", &n1, &n2);int l1 = input(n1), l2 = input(n2);//listmin = getmin(l1, l2, n1, n2);l1 = roll(l1, n1);tmp = getmin(l1, l2, n1, n2);min = (tmp < min) ? tmp : min;l2 = roll(l2, n2);tmp = getmin(l1, l2, n1, n2);min = (tmp < min) ? tmp : min;l1 = roll(l1, n1);tmp = getmin(l1, l2, n1, n2);min = (tmp < min) ? tmp : min;printf("%d", min);return 0;
}
int input(int length)
{int tmp = 0;for(int i = 0, j; i < length; i++){scanf("%d", &j);tmp |= --j;tmp <<= 1;}return tmp >> 1;
}
int roll(int l, int length)
{int i = 1, j = 1;for(int x = 1; x < length; x++)j <<= 1;for(; i < j; i <<= 1, j >>= 1){int a = i & l, b = j & l;if(a)  l |= j;else if(b)  l -= b;if(b)  l |= i;else if(a)  l -= i;}return l;
}//将l上的二进制数翻转
int getmin(int l1, int l2, int n1, int n2)
{for(int i = 0; i < n2; i++, l1 <<= 1)if((l1 & l2) == 0)return (n1 + i > n2) ? n1 + i : n2;return n1 + n2;
}

roll函数是用来翻转“数组”的

getmin函数是用来得到这两个长条摆放情况的时候的最小容器长度的

input函数就是输入,没得说

这篇关于换抵挡装置(按位运算符的运用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/438745

相关文章

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

电力系统中的A类在线监测装置—APView400

随着电力系统的日益复杂和人们对电能质量要求的提高,电能质量在线监测装置在电力系统中得到广泛应用。目前,市场上的在线监测装置主要分为A类和B类两种类型,A类和B类在线监测装置主要区别在于应用场景、技术参数、通讯协议和扩展性。选择时应根据实际需求和应用场景综合考虑,并定期维护和校准。电能质量在线监测装置是用于实时监测电力系统中的电能质量参数的设备。 APView400电能质量A类在线监测装置以其多核

poj 2431 poj 3253 优先队列的运用

poj 2431: 题意: 一条路起点为0, 终点为l。 卡车初始时在0点,并且有p升油,假设油箱无限大。 给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。 问最少加几次油可以到达终点,若不能到达,输出-1。 解析: 《挑战程序设计竞赛》: “在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一

【重学 MySQL】十九、位运算符的使用

【重学 MySQL】十九、位运算符的使用 示例检查权限添加权限移除权限 在 MySQL 中,位运算符允许你直接在整数类型的列或表达式上进行位级操作。这些操作对于处理那些需要在二进制表示上进行直接修改或比较的场景特别有用,比如权限管理、状态标记等。 &(位与) 对两个数的二进制表示进行位与操作。只有两个相应的二进制位都为 1 时,结果的该位才为 1,否则为 0。 |(位

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

第二十四章 rust中的运算符重载

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust中的运算符重载 目录 注意一、前言二、基本使用三、常用运算符四、通用约束 一、前言 C/C++中有运算符重载这一概念,它的目的是让即使含不相干的内容也能通过我们自定义的方法进行运算符操作运算。 比如字符串本身是不能相加的,但由于C++中的String重载了运算符+,所以我们就可以将两个字符串进行相加、但实际

《C++中的移动构造函数与移动赋值运算符:解锁高效编程的最佳实践》

在 C++的编程世界中,移动构造函数和移动赋值运算符是提升程序性能和效率的重要工具。理解并正确运用它们,可以让我们的代码更加高效、简洁和优雅。 一、引言 随着现代软件系统的日益复杂和对性能要求的不断提高,C++程序员需要不断探索新的技术和方法来优化代码。移动构造函数和移动赋值运算符的出现,为解决资源管理和性能优化问题提供了有力的手段。它们允许我们在不进行不必要的复制操作的情况下,高效地转移资源

Java基础--基本运算符介绍

Java运算符 用于指明对于操作数的运算方式。 分类: 按照操作数的数目来进行分类: 单目a++ 双目a+b 三目(a>b)?x:y; 按照运算符的功能来进行分类: 算术运算:+ - * / %(取余)++ – 如: int x=1; x=x+1;//x空间内的值,自己增加了一个 x++;//x空间内的值,自增一个 ++x;//对于x空间内的值来讲都是一致,最终的结果都自

ElasticSearch 6.1.1运用代码添加索引及其添加,修改,删除文档

1、新建一个MAVEN项目:ElasticSearchTest 2、修改pom.xml文件内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or

巧妙的运用Floyd算法

题目大概意思:输入n,m,n代表n个点,接着输入n个点之间的距离(n*n的矩阵),接下来m次询问,输入a,b,c如果a,b之间的最短路径中存在c点则输出Yes,否则输出No 比赛的时候没有做出来,赛后帆哥一点播就知道了。。。。我写的时候直接用floy算法求距离并记录路径。。然后TLE到死。。。我就奇怪了数据n,m都小于100,怎么会TLE啊。。。坑爹啊。。。我一直怀疑是不是用别的算法。。。。。帆