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

给出两个长度分别为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.hqwc.cn/news/235609.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[操作系统] 文件管理

文章目录 5.1 磁盘调度算法1. 先来先服务算法( First Come First Served, FCFS) 算法2. 最短寻道时间优先算法( Shortest Seek Time First, SSTF) 算法3. 扫描算法( SCAN ) 算法4. 循环扫描算法( Circular Scan, CSCAN ) 算法5. LOOK 与 CLOOK 算法 5.2 进程写文件时&#xff0…

全汉电源SN生产日期解读

新买了一个全汉的电脑电源&#xff0c;SN&#xff1a;WZ3191900030&#xff0c;看了几次没想明白&#xff0c;最后估计SN是2023年19周这样来记录日期的。问了一下京东全汉客服&#xff0c;果然就是这样的。那大家如果在闲鱼上看到全汉电源&#xff0c;就知道它的生产日期了。

键入网址到网页显示,期间发生了什么?(计算机网络)

浏览器首先会对URL进行解析 下面以http://www.server.com/dir1/file1.html为例 当没有路径名时&#xff0c;就代表访问根目录下事先设置的默认文件&#xff0c;也就是 /index.html 或者 /default.html 对URL进行解析之后&#xff0c;浏览器确定了 Web 服务器和文件名&#x…

C语言错误处理之 “<errno.h>与<error.h>”

目录 前言 错误号处理方式 errno.h头文件 error.h头文件 参数解释&#xff1a; 关于的”__attribute__“解释&#xff1a; 关于“属性”的解释&#xff1a; 实例一&#xff1a; 实例二&#xff1a; error.h与errno.h的区别 补充内容&#xff1a; 前言 在开始学习…

MySQL如何处理并发访问和高负载?

在当今互联网时代&#xff0c;面对日益增长的数据量和用户访问量&#xff0c;数据库的并发访问和高负载处理变得尤为重要。MySQL作为最流行的关系型数据库管理系统之一&#xff0c;具备许多关键技术和策略来处理并发访问和高负载&#xff0c;下面将对其进行深入探讨。 ​ 图片…

【doccano】文本标注工具——属性级情感分析标注自己的业务数据

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【doccano】文本标注工具——属性级情感分析标注自己的业务数据 1.说明2.前提条件3.doccano创建项目4.添加数据集5.添加标签6.标注数据7.导出数据转换格式 1.说明 2.前提条件 确保doccano已经安装完成 可以参考文…

elk+filebeat+kafka集群部署

EFK实验架构图&#xff1a; 实现高并发&#xff0c;无需指定logstash 3台esfile&#xff0c;3台kafka 20.0.0.10 esfile 20.0.0.20 esfile 20.0.0.30 esfile 20.0.0.11 kafka 20.0.0.12 kafka 20.0.0.13 kafka在es1主机上解压filebeat cd filebeat 安装nginx服务 vim /usr/loc…

JAVA基础进阶(七)

一、集合和数组的区别 集合和数组的区别:数组的长度是固定的,集合的长度是可变的。数组既可以存储基本数据类型&#xff0c;也可以存储引用数据类型。集合只能存储引用数据类型,所以对于基本数据类型byte、short、int等只能存储他们对应的包装类Byte、Short、Integer。 二、集…

初阶C语言-函数

前言 ⭐️此篇博文主要带大家探讨C语言的函数部分的知识点&#xff0c;若有错误&#xff0c;还请佬指出&#xff0c;一定感谢&#xff01; 制作不易&#xff0c;若觉得内容不错可以点赞&#x1f44d;收藏❤️&#xff0c;这是对博主最大的认可&#xff01; &#x1f4da;函数的…

WPF实战项目十八(客户端):添加新增、查询、编辑功能

1、ToDoView.xmal添加引用&#xff0c;添加微软的行为类 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" 2、给项目添加行为 <i:Interaction.Triggers><i:EventTrigger EventName"MouseLeftButtonUp"><i:InvokeCommandAction Com…

maven 基础

maven常用命令 clean &#xff1a;清理 compile&#xff1a;编译 test&#xff1a;测试 package&#xff1a;打包 install&#xff1a;安装 maven坐标书写规范 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</ar…

【JavaEE】多线程 -- 死锁问题

目录 1. 问题引入 2.死锁问题的概念和原因 3. 解决死锁问题 1. 问题引入 在学习死锁之前, 我们先观察下面的代码能否输出正确的结果: 运行程序, 能正常输出结果: 这个代码只管上看起来, 好像是有锁冲突的, 此时的 locker 对象已经是加锁的状态, 在尝试对 locker 加锁, 不应该…