UVA12166 Equilibrium Mobile

2023-11-07

VJ传送门

一道思维题,刚开始看的时候没什么思路,在博客园上参考了大佬的解析,在这里总结一下。

一、分析

这道题要求让天平平衡所需要的最小改动次数,至少有一个不变,我们可以先选定一个不变的基准,然后改变其他的秤砣,得到以此为基准的天平的总重量,如果以深度为d重量为w的秤砣为基准,那么整个天平的重量就是w * pow(2, d),即w << d。

当然,可能会有一些秤砣算出的以各自为基准的天平总重量相同,设天平总重量为sumw,那么这些秤砣的数量就表示了如果使天平的总重量为sumw需要使多少个秤砣保持不变。

以题目所给[[3,7],6]为例,如果将3看做基准,则将7改为3即可,天平总重量为12,再将6看做基准,将7改为3即可,天平总重量为12,即有两个秤砣作为基准得到的天平总重量相同为12,则如果使天平的总重量为12需要使两个秤砣保持不变。

基于以上算法,求出所有可能的sumw值以及其对应的秤砣数量,然后在这些sumw值中找到相对应的最大的秤砣数量maxn,那么sum - maxn即为所求。

二、代码

#include<iostream>
#include<string>
#include<map>

using namespace std;

map<long long, int>mp;
int sum = 0;//叶子个数
string s;
void dfs(int depth, int a, int b)//depth:深度,a:起点,b:终点
{
	if (s[a] == '[')
	{
		int p = 0;
		for (int i = a + 1; i != b; i++)
		{
			if (s[i] == '[')
				p++;
			if (s[i] == ']')
				p--;
			if (p == 0 && s[i] == ',')
			{
				dfs(depth + 1, a + 1, i - 1);//搜索左子树
				dfs(depth + 1, i + 1, b - 1);//搜索右子树
			}
		}
	}
	else
	{
		long long w = 0;
		//这里是将string类型的数字转化为long long类型
		for (int i = a; i <= b; i++)
		{
			w = w * 10 + s[i] - '0';
		}
		sum++;
		mp[w * (1 << depth)]++;
	}
}
int main()
{
	int T;
	cin >> T;
	while (T--)
	{
		sum = 0;
		mp.clear();
		cin >> s;
		dfs(0, 0, s.length() - 1);
		int maxn = 0;
		for (map<long long, int>::iterator it = mp.begin(); it != mp.end(); it++)
		{
			maxn = max(maxn, it->second);
		}
		cout << sum - maxn << endl;
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UVA12166 Equilibrium Mobile 的相关文章

  • Stream使用技巧(1)------数据处理技巧

    Stream使用技巧 1 数据处理技巧 一 背景 作为java8新特性之一的Stream API为开发者带来了极大的便利 它可以对我们需要操作的集合进行非常复杂的操作 以活的我们想要的结果 本文不会告诉你什么是Stream 毕竟网上花里胡哨
  • 双口ram 简介及Verilog实现

    简介 RAM Random Access Memory 随机存储器 是一种用来暂时存储中间数据的存储器 掉电易失 按照类型可以分为单口ram 双口ram 其中双口ram又有简单 伪 的ram 真双端口ram 在异步FIFO的内部就是一个双端
  • Networdx小案例学习

    文章目录 图的类型 无向图小案例 有向图的小案例 参考资料 图的类型 无向图小案例 import networkx as nx import matplotlib pyplot as plt G nx DiGraph 0 1 1 2 2 3
  • couldn‘t find package required on the “npm“ registry

    切换npm源就行 nrm use taobao

随机推荐

  • 对Attention is all you need 的理解

    本文参考的原始论文地址 https arxiv org abs 1706 03762 谷歌昨天在arxiv发了一篇论文名字教Attention Is All You Need 提出了一个只基于attention的结构来处理序列模型相关的问题
  • 遗传算法与C++实现

    1 遗传算法 核心是达尔文优胜劣汰适者生存的进化理论的思想 一个种群 通过长时间的繁衍 种群的基因会向着更适应环境的趋势进化 适应性强的个体基因被保留 后代越来越多 适应能力低个体的基因被淘汰 后代越来越少 经过几代的繁衍进化 留下来的少数
  • c++ vector

    初始化 1 默认初始化 vector为空 size为0 表明容器中没有元素 而且 capacity 也返回 0 意味着还没有分配内存空间 这种初始化方式适用于元素个数未知 需要在程序中动态添加的情况 vector
  • 华为OD机试 Python 【最小循环子数组】

    描述 给定一个数字数组 看看这个数组能否由一个子数组不断重复形成的 请找出那个可能的最小子数组 输入方式 第一行 数组里的数字数量 记作 n 1 n 100000 第二行 数组的数字 用空格隔开 每个数字都在 0 到 9 之间 输出方式 打
  • Pandas Excel Writer writer.book = book的原因

    工作 from openpyxl import load workbook import pandas as pd file r YOUR PATH TO EXCEL HERE df1 pd DataFrame Data 10 20 30
  • having子句与where子句

    1 相同点 都是对记录进行筛选 2 不同点 2 1 where 不能放在group by后面 2 2 having 是跟group by连在一起用的 放在group by 后面 此时的作用相当于where 2 3 where 后面的条件中不
  • 基于Python招聘爬虫可视化-招聘数据可视化

    视频展示 基于Python招聘爬虫可视化 项目定制 招聘数据可视化 哔哩哔哩 bilibili
  • C++primer练习12.1.4

    12 14 struct destination 连接的目的地 struct connection 使用连接所需的信息 connection connect destination 打开连接 void disconnect connecti
  • Ext智能提示 - Eclipse 3.2

    Eclipse的Ext 2 0 2智能提示 它提供了非常准确的Ext API提示 如图 下载地址 http www agpad com downloads spket 1 6 12 zip 引用方法 方法來自會員 kittig 1 将下载回
  • 【模拟电路】二极管分类

    1 TVS二极管 瞬态电压抑制器 在电路中 TVS二极管都是反向接在电源端 一旦瞬时电压超过电路正常工作电压后 TVS二极管便发生雪崩效应 提供给瞬时电流一个超低电阻通路 从而使得被保护器件或设备避免受到损毁 图1 图2 找了个网上的图 先
  • 必看!区块链如何推动电商行业的发展?

    区块链技术被认为是第四次工业革命中最具颠覆性的创新技术 世界上还没有见过比区块链技术更强大的技术 它可能会对所有经济部门产生潜在的影响 给它们带来一流的效率 近些年来 区块链技术在金融服务行业 能源行业 物流行业 供应链管理行业 医疗行业等
  • ambari自动化Hadoop部署

    20200922 0 引言 几年前为了处理大量的日志 简单学习了hadoop的内容 之后就在自己的几台破PC上进行了实验 当时安装的方式步骤大致如下 利用expect脚本完成免密登陆 利用clush进行集群管理 比如传输文件 或者文件及命令
  • 软件测试风险清单

    软件测试风险 主要分为 风险评估和风险控制 软件测试风险大致可以从以下几个方面考虑 一 人力 风险评估点 1 人力资源不够 2 测试用例未被完全执行 3 人员流动 测试人员对业务不熟悉 相对应的风险控制 1 按照项目计划 测试计划准备好测试
  • Altium Designer 16 放置PCB禁止布线层步骤

    放置PCB禁止布线层步骤 菜单栏中的Place gt 子菜单项Keepout gt 有几种设置模式一般选用Track 直线绘制 添加以后绘制线图不能超过禁止布线层所圈出的范围
  • 记忆碎片之python线程池、submit()、done()、result()、wait()、as_completed()、map()方法

    大量注释 小白一看就懂的多线程及参数使用 threadpool已经不再是主流 但是对于任务数量不断增加的程序 每有一个任务就生成一个线程 最终会导致线程数量的失控 例如 整站爬虫 假设初始只有一个链接a 那么 这个时候只启动一个线程 运行之
  • Go语言的图灵机

    代码如下 package main import fmt var a 30000 byte prog gt lt gt p pc int func loop inc int for i inc i 0 pc inc switch prog
  • python基础七:元组、字典、以及集合的使用

    1 元组简介 1 1元组的基本概念 元组表现形式tuple 元组是一个不可变序列 一般当我们希望数据不改变时 我们使用元组 其他情况下基本都用列表 使用 创建元素 元组不支持通过序列来修改元素 可以查找 元组不是空元组至少有一个 逗号 当元
  • Java中交集、并集、差集、补集、去重的实现

    一 交集 1 交集的实现 交集 Test public void intersection 向集合中添加元素 ArrayList
  • windows10 系统默认备份后如何还原?

    在控制面板中 如下操作 选着开始系统还原 选着备份的还原文件
  • UVA12166 Equilibrium Mobile

    VJ传送门 一道思维题 刚开始看的时候没什么思路 在博客园上参考了大佬的解析 在这里总结一下 一 分析 这道题要求让天平平衡所需要的最小改动次数 至少有一个不变 我们可以先选定一个不变的基准 然后改变其他的秤砣 得到以此为基准的天平的总重量