当前位置: 首页 > news >正文

牛客round94E

 原题链接:E-小苯的数字操作_牛客周赛 Round 94
题目背景:

        集合中初始有一个元素 n 可以对集合进行 k 轮操作,每次操作可以将集合中的元素除以 2(下取整)或乘 2 并将元素添加到集合中,请问最后集合中有几个元素。

思路:

        通过模拟过程不难发现以下规律:

                1.如果 n 为偶数,我们对其除以 2 后再乘 2 ,可以发现是没有贡献的。

                二进制:1100 -> 110 -> 1100

                2.如果 n 为奇数,我们对其除以 2 后再乘 2,可以发现有一次贡献。

                二进制:1101 -> 110 -> 1100

        可以假设 k = 4,可以得到几种枚举过程:x x x x,/ x x x,/ / x x,/ / / x

        如果 n 为偶数第一种枚举会得到四点贡献,既每一次都会得到一个新数字;第二种枚举会得到一点贡献,既第一次除以 2 的时候;以此类推,后面两种的贡献为 2,3。

        如果 n 为奇数第一种枚举会得到四点贡献,既每一次都会得到一个新数字;第二种枚举会得到四点贡献,及每一次运算时(因为初始时 n 为奇数,除以 2 以后变为一个偶数,后面每一次运算都是一种新的值,既 1101 -> 110 -> 1100 -> 11000 -> 110000)。

        通过以上模拟可发现:如果当前 n 为偶数那么会得到 1 个新值,如果当前为奇数那么会得到k点贡献(剩余轮数)。

        特判:如果 n = 1,他的贡献是 1,因为 0 后面的数字不能继续除了。

        为什么不乘完再除呢:如果当前 n 为奇数,乘 2 变为偶数,再除以 2 又变为原来的 n ,可以发现这样没有意义。

数据范围:

        1 <= t <= 1e4,1 <= n,k <= 1e9。

ac代码: 
#include <bits/stdc++.h>#define ioscc ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'
#define me(a, x) memset(a, x, sizeof a)
#define all(a) a.begin(), a.end()
#define sz(a) ((int)(a).size())
#define pb(a) push_back(a)
using namespace std;typedef unsigned long long ull;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<vector<int>> vvi;
typedef vector<int> vi;
typedef vector<bool> vb;const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int MAX = (1ll << 31) - 1;
const int MIN = 1 << 31;
const int MOD = 1e9 + 7;
const int N = 1e5 + 10;template <class T>
ostream &operator<<(ostream &os, const vector<T> &a) noexcept
{for (int i = 0; i < sz(a) - 10; i++)std::cout << a[i] << ' ';return os;
}template <class T>
istream &operator>>(istream &in, vector<T> &a) noexcept
{for (int i = 0; i < sz(a) - 10; i++)std::cin >> a[i];return in;
}void solve()
{int n, k;cin >> n >> k;ll ans = k + 1;while (n > 0){if (!k)break;if (n & 1){if (n > 1)ans += k;else++ans;}else++ans;n >>= 1;k--;}cout << ans << endl;
}int main()
{ioscc;int T;cin >> T;while (T--)solve();return 0;
}


文章转载自:

http://sY2IQ5OI.nmymn.cn
http://ic4snVzF.nmymn.cn
http://f4BuYBfd.nmymn.cn
http://vWYwykyX.nmymn.cn
http://x8n9NuTg.nmymn.cn
http://OMEXWRl5.nmymn.cn
http://WznWsUUA.nmymn.cn
http://DZd9SCMf.nmymn.cn
http://IsfGvX73.nmymn.cn
http://MBifTTfU.nmymn.cn
http://RoOVcTYp.nmymn.cn
http://0tWhKF1z.nmymn.cn
http://n9Ny9gq3.nmymn.cn
http://D0JrX3KL.nmymn.cn
http://I9lreOJU.nmymn.cn
http://ihkhxttt.nmymn.cn
http://mijNp4bz.nmymn.cn
http://wNtSItrZ.nmymn.cn
http://aAociZPn.nmymn.cn
http://1XwKquv2.nmymn.cn
http://2Bd8OrFX.nmymn.cn
http://G6l0ww7q.nmymn.cn
http://KsEDVwrJ.nmymn.cn
http://0isFXvUG.nmymn.cn
http://dFMLpQDT.nmymn.cn
http://yfi3sftZ.nmymn.cn
http://eqGcNwbj.nmymn.cn
http://p3njIBy8.nmymn.cn
http://X622PqmB.nmymn.cn
http://aT2Kmecd.nmymn.cn
http://www.dtcms.com/a/214750.html

相关文章:

  • vue3 数值计算 保留小数位
  • 嵌入式学习之系统编程(五)进程(2)
  • day8补充(中断驱动和队列缓冲实现高效数据处理)
  • 文件管理(第八章、九)
  • PDF处理控件Aspose.PDF教程:以编程方式合并PDF文档
  • 一文带你彻底理清C 语言核心知识 与 面试高频考点:从栈溢出到指针 全面解析 附带笔者手写2.4k行代码加注释
  • DP KVM 为何更难实现 EDID 模拟器?
  • day38python打卡
  • 主流Agent Memory工具or框架对比(Mem0、LangMem、Letta)
  • 若依框架中返回自定义实体类分页数据和总记录数的实现方法
  • 【鸿蒙开发】Hi3861学习笔记-雨滴传感器
  • 433M射频接收芯片 XL520 产品特性,空旷环境下通讯距离可达200米
  • liunx、ubantu22.04安装neo4j数据库并设置开机自启
  • 【多智能体系统开发框架AutoGen解析与实践】
  • 【关于C++跨平台开发的挑战】
  • World of Warcraft [CLASSIC] Jewelcrafting Gemstone 3 [80 WLK]
  • 什么是风控合规?企业如何高效构建风控合规体系?
  • Python多线程:超详细实例讲解线程的创建
  • 一个简单的系统插桩实现​
  • AI时代新词-人工智能生成内容(AIGC)
  • Python环境搭建
  • jsoup解析页面过程中保留页面中的换行符
  • new对象时,堆会发生抢占吗
  • Docker Volume(存储卷)
  • Netty学习专栏(六):深度解析Netty核心参数——从参数配置到生产级优化
  • SpringBoot3集成Oauth2.1——6数据库存储客户端信息
  • 【数字图像处理】_笔记
  • OpenGAN:基于开放数据生成的开放集识别
  • OceanBase数据库全面解析(高级特性篇)
  • 每日Prompt:黄沙大圣