首页 > 其他分享 >CF1864C Divisor Chain

CF1864C Divisor Chain

时间:2023-08-29 12:44:56浏览次数:30  
标签:CF1864C Divisor Chain int lowbit cnt 反例 减去 每次

思路

刚拿到题,想了一些方法但都被推翻了,在这里列举出来,并给出反例:

  • 每次减去最小的因数,反例:\(1024\) 等形如 \(a^k\) 的数,每次都会减去 \(a\) 导致 \(a\) 的出现次数超过 \(2\) 次。

  • 每次减去大于等于 \(\sqrt x\) 的因子,\(x\) 为目前的数,并特判指数的情况,反例:\(35\) 等由两个质数相乘的数,会减去多次较大的质数,导致出现次数超 \(2\) 次。

  • 记忆化搜索,没反例,但是时间复杂度会超。

在经过多次尝试后,我终于想到了一点,如果 \(x\) 是形如 \(2^k\) 的数,可以每次减去 \(\frac x 2\) 直到变为 \(1\)。

那么,我们尝试把给定的数变为 \(2^k\) 的形式。

发现给定的数离 \(2^k\) 的差距就只是二进制下除了最高位的 \(1\)。

所以可以先每次减去 \(\operatorname{lowbit}(x)\),直到 \(x\) 为 \(2^k\),然后再每次减去 \(\frac x 2\)。

发现前半部分最多减去了一次 \(2^l\) 其中 \(0\le l <k\)。

然后后半部分会减去 \(2^m\) 其中 \(0\le m <k\) 各一次。

所以不会超过 \(2\) 次的限制。

AC code

#include<bits/stdc++.h>
using namespace std;
inline int lowbit(int x){return x&(-x);}
int T,n,ans[1005],cnt,nn;
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n),cnt=0,nn=n;
		while(n&(n-1))//判断是否变为2^k
		{
			ans[++cnt]=lowbit(n),n-=lowbit(n);//记录操作
		}
		while(n>1) ans[++cnt]=n/2,n/=2;//每次减去n/2
		printf("%d\n",cnt+1);//操作cnt次,共cnt+1个数
		for(int i=1;i<=cnt;++i)
		{
			printf("%d ",nn),nn-=ans[i];
		}
		printf("%d\n",nn);
	}
	return 0;
}

标签:CF1864C,Divisor,Chain,int,lowbit,cnt,反例,减去,每次
From: https://www.cnblogs.com/One-JuRuo/p/17664450.html

相关文章

  • CF1864C
    记录一道昨天卡住的题问题链接给你一个整数\(n\),你可以进行最多\(1000\)次操作,使得\(n\)减去它的一个因数,要求每种减数至多出现两次我们考虑先把\(n\)进行质因数分解,得到质因数序列\(P\)\(\{p_1,p_2,...,p_m\}\)我们从中取出一个最大的质因数\(x\),然后让\(n\)减去\(\frac......
  • Facechain使用教程:3张照片就能生成个人写真,还完全免费
    1.效果展示下面4张图片,小伙伴们有没有看出来哪些是原图,哪些是AI生成的呢?上面的图片第1张是原图,其他的都是AI生成的哦~今天来教大家怎么用facechain训练自己的人物写真模型,然后就可以尝试各种风格的照片了。2.Facechain说明准备工作:Facechain了解一下,地址:https://github.com/modelsc......
  • LangChain-Chatchat学习资料-Windows开发部署(踩坑篇)
    LangChain-Chatchat学习资料-Windows开发部署(踩坑篇)环境准备的坑1.CUDA版本问题我是用的RTX3060显卡,通过nvidia-smi命令,查看显卡支持的CUDA版本为12.2,然后下载版本的CUDA,后续发现这里是个坑,pytorch目前最新版为2.0.1,支持的cuda版本最高为11.8,所以想使用显卡跑pytorch,需要讲CUDA......
  • LangChain-Chatchat学习资料-Windows开发部署
    在windows10下的安装部署参考资料1.LacnChain-Chatchat项目基础环境准备本人使用的是Windows10专业版22H2版本,已经安装了Python3.10,CUDA11.8版本,miniconda3。硬件采用联想R9000P,AMDR75800H,16G内存,RTX30606G。安装依赖#使用conda安装激活环境condacreate-nLangchain......
  • LangChain-Chatchat的简介
    LangChain-Chatchat的简介LangChain-Chatchat(原Langchain-ChatGLM):基于Langchain与ChatGLM等大语言模型的本地知识库问答应用实现。下面是他的官方介绍:......
  • ChainOfResponsibilityPattern-责任链模式
    在C#中,责任链模式(ChainofResponsibilityPattern)是一种行为型设计模式,它可让多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。请求沿着一个链传递,直到有一个对象处理它为止。责任链模式有以下几个关键角色:Handler(处理器):定义处理请求的接口,并通常持有一......
  • LangChain + Streamlit + Llama:将对话式AI引入本地机器
    推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景什么是LLMS?大型语言模型(LLM)是指能够生成与人类语言非常相似的文本并以自然方式理解提示的机器学习模型。这些模型使用包括书籍、文章、网站和其他来源在内的广泛数据集进行训练。通过分析数据中的统计模式,LLM可以预......
  • chatglm2-6b模型在9n-triton中部署并集成至langchain实践
    一.前言近期,ChatGLM-6B的第二代版本ChatGLM2-6B已经正式发布,引入了如下新特性:①.基座模型升级,性能更强大,在中文C-Eval榜单中,以51.7分位列第6;②.支持8K-32k的上下文;③.推理性能提升了42%;④.对学术研究完全开放,允许申请商用授权。目前大多数部署方案采用的是fastapi+uvi......
  • langchain接入星火大模型(其他模型也可以参考)
    首先来说LangChain是什么?不了解的可以点击下面的链接来查看下。LangChain入门指南_故里_的博客-CSDN博客然后在介绍一下星火认知大模型相关:讯飞星火认知大模型感兴趣的小伙伴可以了解一下,国内比较成熟的类GPT(我自己定义的,也不知道对不对)模型。说一下大概需求,首先我是要用到功......
  • B. Longest Divisors Interval
    link需要思考一下如果这个题能做,那么肯定有一种比较可行的做法。如果\([l,r]\)是可行的,那么就意味着\([1,r-l+1]\)是可行的这是显然的,显然后者的每一个数在前者中必然有对应的倍数,所以等效。这样从1开始找就行了。#include<cstdio>#include<iostream>#include<cstring>#i......