首页 > 其他分享 >P10892 SDOI2024 题解

P10892 SDOI2024 题解

时间:2024-08-21 19:15:14浏览次数:7  
标签:右移 加一 倒数 题解 SDOI2024 纠结 取整 ans P10892

【题意简述】

你有一个数字 \(n\),每次操作将 \(n/2\),如果 \(n\) 是一个奇数,你会纠结是向上取整还是向下取整。

问你最少纠结多少次。

多组数据。

【思路】

为了方便起见,我们在二进制下重新审视这个题目:

  • 在二进制下,一个数除以 \(2\) 等同于右移一位。
    • 默认向下取整,因为右移会舍弃最后一位,可能使答案偏小。
    • 如果要向上取整,就将结果加一。

题目就变成了:

你有一个数字 \(n\),每次操作将 \(n\) 右移一位。

如果 \(n\) 是一个奇数,你会纠结是否将结果加一。

问你最少纠结多少次。

分类讨论:

  • \(n\) 是偶数:说明 \(n\) 最后一位是 \(0\),直接右移。
  • \(n\) 是奇数:说明 \(n\) 最后一位是 \(1\):
    • 如果 \(n\) 的倒数第二位是 \(0\),那么不选择加一,不然倒数第二位变成 \(1\),又多一个纠结点。
    • 如果 \(n\) 的倒数第二位是 \(1\),那么选择加一一定不劣(可以通过进位,可能少几个 \(1\))。

膜拜一血 Shadow_T。

【Code】

#include <bits/stdc++.h>
#define int long long
using namespace std;

int n,ans;
void Main(){
	ans=0;
	scanf("%lld",&n);
	while(n){
		if(n%2==0){
			n=n/2;               // n 直接除以 2
		}else
			if((n/2)&1) n=n/2+1; // n 倒数第二位是 1,进位
			else        n=n/2;   // n 倒数第二位是 0,不进位
			ans++;
		}
	}
	printf("%lld\n",ans);
}

int T;
signed main()
{
	scanf("%lld",&T);
	while(T--) Main();
	return 0;
}

标签:右移,加一,倒数,题解,SDOI2024,纠结,取整,ans,P10892
From: https://www.cnblogs.com/Sundar-2022/p/18372361

相关文章

  • P7706 文文的摄影布置 题解
    P7706文文的摄影布置题解原题读完题,发现是线段树。单点修改+区间查询。不过查询的值有些奇怪,就是了,我们考虑用线段树维护这个ψ值(下称待求值)。对于一个区间的待求值,大概有四种情况:如上图四种情况分别为:待求值最大值在左区间待求值最大值在右区间\(a_i与b_j\)在左......
  • 一元柯西问题解法整理与试证明(傅里叶变换的应用)
    关于柯西问题:  柯西问题是指偏微分方程仅有初始条件而无边界条件的定解问题,常用特征线法、分离变量法、格林函数法以及傅里叶变换求解,柯西问题即对于  其中   为主函数, 为初始条件,求解U(x,t)关于傅里叶变换:公式:对于一维方程f(x)有    或  卷积:若,则......
  • [题解]P2444 [POI2000] 病毒
    P2444[POI2000]病毒题目核心是多模式匹配,所以考虑用对所有模式串建立AC自动机。我们把自动机上,存在一个模式串作为前缀的节点,称作“危险节点”。如果无限长的安全代码存在的话,匹配过程中Trie图上一定有节点会经过多次,即存在环;而且经过的所有节点都不是“危险节点”,否则就包含......
  • TCP通信之经典问题解决
    先看下面的代码,研究下执行后会出现什么?服务端:fromsocketimport*ip_port=('127.0.0.1',8003)buffer_size=1024sock_server=socket(AF_INET,SOCK_STREAM)sock_server.bind(ip_port)sock_server.listen(5)whileTrue:print('服务端建立连接...')conn,addr=soc......
  • P1972 [SDOI2009] HH的项链 题解
    前言这是一篇分块题解,大概的思路洛谷的题解里的巨佬讲的很清楚(我的思路其实和大佬的差不多),可以去看看qaq。因为苯人为了卡常魔改代码,所以在本题解的中间具体步骤展示部分仅展示魔改前的代码(也就是被卡常但是好看一点的代码),魔改后的代码(100pts)在文章最末展示。题意题面传送门......
  • 操作系统基础之磁盘及软考高级试题解析
    概述基本概念磁盘有正反两个盘面,每个盘面有多个同心圆,每个同心圆是一个磁道,每个同心圆又被划分为多个扇区,数据就被存在扇区中。磁头首先寻找到对应磁道,然后等到磁盘进行周期旋转到指定的扇区,才能读取到对应的数据。存取时间=寻道时间+等待时间盘面号(磁头号):0~M-1;由于一......
  • 信号量、PV操作及软考高级试题解析
    信号量在并发系统中,信号量是用于控制公共资源访问权限的变量。信号量用于解决临界区问题,使得多任务环境下,进程能同步运行。此概念是由荷兰计算机科学家Dijkstra在1962年左右提出的。信号量仅仅跟踪还剩多少资源可用,不会跟踪哪些资源是可用的。信号量机制,处理进程同步和互斥的问......
  • 题解:Codeforces Round 967 (Div. 2) B [思维/构造]
    B.GeneratePermutationtimelimitpertest:1.5secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputThereisanintegersequence\(a\)oflength\(n\),whereeachelementisinitially\(-1\).Misukihastwoty......
  • [ABC133D] Rain Flows into Dams 题解
    思路其实就是一道数学题。设每座山的水量为$ans_i$,大坝的水量为$w_i$,则根据题意可以得到以下方程:$$\begin{cases}w_i=\frac{ans_i+ans_{i+1}}{2}&i<n\w_i=\frac{ans_i+ans_1}{2}&i=n\end{cases}$$所以只要求出任意一个$ans$就可以求出剩余的$ans$,这里我选择求$ans_1$的......
  • CF1264D1 题解
    blog。写一个题解区没有的蠢做法,不依赖dp但是很难转到HardVersion(对于已经确定的序列,深度有单调性。就是如果答案为\(x\),那么肯定能选出深度为\(1\simx\)的子序列。记\(\operatorname{check}_s(x)\)表示check序列\(s\)能否选出深度为\(x\)的子序列。考虑如何c......