51nod 1859 Clarke and number ACM

第十三届蓝桥杯省赛模拟赛C/C++ 第一题: 问题描述 以下是一个 25 行 25 列的字母矩阵,全部由字母 A 和 B 组成。 AAAAAAABABBAABABABAAAAAAA ABBBBBABBAABBBBBABABBBBBA ABAAABABBBABAABBBBABAAABA ABAAABABBBBBAABAABABAAABA ABAAABABBABABBABABABAAABA ABBBBBABBBABAABBBBABBBBBA AAAAAAABABABABABABAAAAAAA BBBBBBBBABAABABBB 阅读详情

 

克拉克是一名人格分裂患者.某一天克拉克变成了一名数论研究者,在研究数字.

他想到了一个题:给定非负整数 x 和正整数 k ,可以做若干操作,每次操作是以下两种方法之一:

1.  x=x−k 

2.  x=⌊x√⌋2 

 

现在克拉克想知道,这个整数最少经过多少次操作可以变成 0 .

 

Input

第一行是一个正整数T(1≤T≤100),表示数据组数.  
每组数据只有一行两个整数x, k(0≤x≤10^18, 1≤k≤2).

Output

每组数据输出一行一个整数,表示最少的操作数.若不存在方案,输出-1

Input示例

2
2 1
3 2

Output示例

2
-1

 

 

 

   可以进行两种操作     1.  x-k   2   x=⌊x√⌋2

     k要么是1要么是2,首先看操作,可以使一个数减k。或者是x下到一个平方梯度。

     比如,4 9 16 25 36,分别是2,3,4,5,6的平方,如果x刚好大于哪个,操作2可以直接跳到那个平方数

     从一个平方数跳到下一个平方数最快需要两步,先1后2,就算是9到跳4,如果单纯一直减k至少3步(算k为2)

     一开始若x等于平方数就不用说了,如果大于就操作2直接跳到平方数,需要一步,再跳下一个平方数两步

     比如:x=35 ,先2操作,x=25,再1,x=24,再2,x=16,一共三步,也是最少步数的方法(除了特例)

    但是也有特殊情况,当k=2时,一开始的归平方数和减1可以一步完成,再归平,只需要两步

     比如:x=26,先2,x=25,再1,x=23,再2,x=16.   一共三步

             但是先2再1其实就减了2,原本1操作是为了x不等于平方数,配合2操作能跳到下一个平方数

              x=26,先1, x=24,再2,x=16             一共两步 

       数据大小10的18次方,无论k为多少,当x减到4都能变成0,先用答案计算数值到一个平方数的步数

       然后开方减去2乘2:  (sqrt(x)-2)*2,从一个平方数到下一个需要两步,计算与4差多少个平方数直接开方后减就好了

       计算答案有个bug的地方,就是精度问题,导致sqrt(999999999.......)=10000000000....

       可以用二分找到刚好小于他的平方数解决,也可以对它开方后平方,与原数据处理,sqrt(x)^2>x,就对ans处理

        当x<=4使,一开始判断分析,直接输出答案跳过。

         

if(n==0)           cout<<"0"<<endl;
if(n==1&&k==1)     cout<<"1"<<endl;
if(n==2)           cout<<n/k<<endl;
if(n==3&&k==1)     cout<<"2"<<endl;
if((n==3&&k==2)||(n==1&&k==2))   cout<<"-1"<<endl;
  

 

      附上代码:

       

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;

int main()
{
    long long int sqr,cha,ok=0,ans=0;//sqr是开方后的数值,cha是开方后再平方与原来的差值,ok是标志在这无作用
    long long int cas,n,k;           //ans是步数
    cin>>cas;
    while(cas--)
    {
        ans=0;
        cin>>n>>k;
        if(n==0)
        {
            cout<<"0"<<endl;
            continue;
        }
        if(n==1&&k==1)
        {
            cout<<"1"<<endl;
            continue;
        }
        if(n==2)
        {
            cout<<n/k<<endl;
            continue;
        }
        if(n==3&&k==1)
        {
            cout<<"2"<<endl;
            continue;
        }
        if((n==3&&k==2)||(n==1&&k==2))
        {
            cout<<"-1"<<endl;
             continue;
        }
        sqr=sqrt(double(n));
       // cout<<"sqr="<<sqr<<endl;
        cha=n-sqr*sqr;
        //cout<<"cha="<<cha<<endl;
        if(cha==0)
            ok=1;
        else if(cha==1&&k==2&&n>9)
        {
            ans+=2;
            sqr--;

        }
        else if(cha<0)
        {
            ans++;
            sqr--;
        }
            else
        {
            ans++;
        }
        ans+=(sqr-2)*2;
            ans+=2;
        if(k==1)
            ans++;
        cout<<ans<<endl;
    }
	return 0;
}

 

 

 

    

 

 

零基础教程:用Python给试卷照片自动切题(有道OCR+PIL完整流程) 本文为零基础用户提供了一套完整的Python自动化切题方案。通过调用有道OCR API识别试卷照片中的题目坐标,并利用PIL库进行精准裁剪,将杂乱的试卷图片自动分割为独立的题目图像。教程详细涵盖了环境搭建、图像预处理、API调用、坐标解析与批量处理全流程,帮助教育工作者和技术爱好者高效处理大量试卷,实现工作流程自动化。 阅读详情

相关推荐

关于AD中如何绘制原理图及其封装

AD中如何绘制原理图及其封装 题记:这是一个比较基础的知识,之所以我打算写一篇这样的笔记,主要是因为在日常生活中,我极少绘制特殊模块或芯片原理图及其封装。久而久之就忘记咋画了,有时需要画封装的时候又想不起来,网上的资料虽然一堆堆的,但往往只是仅原理图的绘制,或者是仅封装的绘制。为此我写一篇这样的笔记,记录绘制原理图及其封装的一条龙服务,感觉这对我而言尤为重要。 本文分为三大板块,依次是原理图的绘制、封装的绘制、二者的联立 第一板块——原理图的绘制 原理图的建立 第二板块——封装的绘制 第三板块——二者的

weixin_51130221的博客 7万+

c语言基础

整数除法会截断结果中的小数部分.取模运算符%不能应用于float和double类型逻辑运算符&&与||有一些较为特殊的属性,由&&与||连接的表达式按从左到右的顺序进行求值,并且,在知道结果值为真或假后立即停止运算。/* atoi: convert s to integer */ int atoi(char s[]) {    int i,n;    n = 0;    for(i = 0; s[i] >= '0' && s[i]         n = 10*n + (s[i] - '0')

哈哈哈 1133

Ubuntu无桥接模式或连不上网(详细解决方法

目录 问题1:Ubuntu没有未桥接的主机网络适配器 解决方法 1.打开VMware安装目录下的文件 ​编辑2.右键安装以上三个文件 3.打开网络状态属性,找到VMware bridgeProtocol,点击安装 问题2.Ubuntu桥接模式连不上网 1.win+r打开cmd终端,输入ipconfig /all 2.记录以下数据 3.打开VMware网络设置 问题1:Ubuntu没有未桥接的主机网络适配器 VMWare安装之后,虚拟网络一直使用默认配置 VMnet0为...

m0_65592409的博客 6062

51Nod-1859-Clarke and number

ACM模版描述题解这个题,简单的来,就是暴力打表找规律,注意一点,sqrt()sqrt() 可能存在精度问题,最好自己写一个二分的,因为这个,WAWA 了四回……官方题解也给大家分享一下,写得挺详细的:代码#include <cstdio>using namespace std;typedef long long ll;const ll INF = 1e10; // ll 开方后约为 1e9

逐梦者 471

深入解析iDP3的Learning模块:从数据集构建到3D动作预测的代码实现

本文深入解析iDP3框架的Learning模块,从数据集构建到3D动作预测的完整代码实现。通过扩散模型实现视觉输入到动作序列的端到端预测,详细介绍数据采集、增强策略、模型架构及训练技巧,帮助开发者掌握3D动作预测策略的核心技术。

k0l1m2n3o的博客 310

解忧杂货铺(四):Hightec生成HEX方法+小功能开启

Hightec使用的一些常用技能

梦想技术家 2160

51nod 1859 Clarke and number 打表

打表找规律,随便找找就有了,实在不行看题解,写的很清楚 sqrt出现了误差,判断一下就就好了。#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) us

老臣 380

SCI一区论文投稿终极技巧:Expert Systems With Applications;Knowledge-Based Systems

投稿计算机1区论文(如KBS、ESWA)的核心技巧包括:1)关键词选择需平衡范围与相关性,避免过细或过泛;2)研究内容聚焦单一核心创新点,避免内容分散;3)必须设计消融实验量化创新点的贡献;4)公开实验代码和数据集,确保可验证性;5)合理使用AI工具仅辅助写作,核心内容需自主完成;6)实验数据必须真实可靠。特别强调1区期刊对创新性和实验严谨性的高要求,需避免常见拒稿原因如内容分散、缺乏验证等。这些策略可提高投稿成功率,但前提是研究本身具有实质性创新。

ZhangJiqun&191cm&85kg 1153

[乱搞]51 Nod 1859—Clarke and number

题目梗概给定一个数,可以对这个数做一下两种操作:x=x−kx=x-kx=⌊n√⌋2x=\lfloor \sqrt n \rfloor ^2用最小的步数使n->0。解题思路对于第二种操作,就是将x变为小于等于x的最大的平方数。显然两种操作需要交替操作。方法很简单,注意特殊情况就可以了。#include<cstdio> #define LL long long using namespace std;

CHN_JZ的博客 599

56、Cortex - M33处理器浮点单元(FPU)的使用与优化

本文详细介绍了Cortex-M33处理器浮点单元(FPU)的使用与优化方法,涵盖单双精度浮点计算的选择、编译器命令行配置、ABI模式对比、特殊FPU模式设置(如Flush-to-Zero、Default NaN)、浮点异常处理机制以及FPU电源管理策略。结合代码示例和流程图,提供了在不同应用场景下的最佳实践建议,并总结了常见问题及解决方案,帮助开发者提升嵌入式系统中浮点运算的性能、精度与能效。

bread的博客 154

【OpenCV】图像的像素直方图 图像特征点 cv::FAST cv::ORB ORB_SLAM2::ORB

文章目录图像直方图代码实现cv::FAST和cv::ORB 检测图像特征点cv::FAST和cv::ORB 检测图像特征点代码实现ORB_SLAM2::ORB和自己实现ORB图像特征点检测效果对比ORB_SLAM2::ORB和自己实现ORB图像特征点检测效果对比代码实现 图像直方图代码实现 图像是由不同数值(颜色)的像素构成的,像素值在图像中的分布情况是图像的重要属性,可以用直方图修改图像的外观,标识图像的内容,检测图像中特定的物体或纹理。 单通道灰度图像中每个像素都有一个 0(黑色)-255(白色)的整

小秋 AI SLAM 入门实战教程 2510

51nod 1105 第K大的数【二分】

题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1105 题意: 数组A和数组B,里面都有n个整数。数组C共有n^2个整数,分别是A[0] * B[0],A[0] * B[1] ……A[1] * B[0],A[1] * B[1]……A[n - 1] * B[n - 1](数组A同数组B的组合)。求数组C中第K大的数

HARD_UNDERSTAND 305

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

51Nod-1105-第K大的数

ACM模版描述题解这里使用二分套二分查找即可。一般的二分查找是通过下标范围查找,而二分套二分是为了求两个数组组合乘积的问题,查找第K大的值,这里我们需要通过数据的范围查找,而不是下标的范围,这里需要两次快排。需要强调的一点是数据范围问题!!!一定要使用long long型,避免数据溢出!!!代码#include <iostream> #include <algorithm> #include <cs

逐梦者 1407

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【蓝桥杯】模拟赛详解,冲刺国赛

【蓝桥杯】模拟赛详解,冲刺国赛

小羊不会飞的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

2022蓝桥模拟

1、以下是一个 25 行 25 列的字母矩阵,全部由字母 A 和 B 组成。   AAAAAAABABBAABABABAAAAAAA   ABBBBBABBAABBBBBABABBBBBA   ABAAABABBBABAABBBBABAAABA   ABAAABABBBBBAABAABABAAABA   ABAAABABBABABBABABABAAABA   ABBBBBABBBABAABBBBABBBBBA   AAAAAAABABABABABABAAAAAAA   BBBBBBBBABAABABBBBB

qq_45677735的博客 2128

51nod 1113 矩阵快速幂 (矩阵的n次方)

给出一个N * N的矩阵,其中的元素均为正整数。求这个矩阵的M次方。由于M次方的计算结果太大,只需要输出每个元素Mod (10^9 + 7)的结果。 Input 第1行:2个数N和M,中间用空格分隔。N为矩阵的大小,M为M次方。(2<=N<=100,1<=M<=10^9) 第2-N+1行:每行N个数,对应N*N矩阵中的1行。(0&...

ZoneForZero 944

51nod 1212 无向图最小生成树(prim算法和kruska算法) 新手小结

N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树。 Input 第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量。(2<=N<=1000,1<=M<=50000) 第2-M+1行:每行3个数SEW,分别表示M条边的2个顶点及权值。(1<=S,E<=N,1<=W<=...

ZoneForZero 834

51nod 1099 任务执行顺序 ACM

有N个任务需要执行,第i个任务计算时占R[i]个空间,而后会释放一部分,最后储存计算结果需要占据O[i]个空间(O[i] < R[i])。 例如:执行需要5个空间,最后储存需要2个空间。给出N个任务执行和存储所需的空间,问执行所有任务最少需要多少空间。 Input 第1行:1个数N,表示任务的数量。(2<=N<=100000) 第2-N+1行:每行...

ZoneForZero 653

51nod 1396 还是01串 -Zero

1396还是01串 基准时间限制:1秒 空间限制:131072KB 分值:20难度:3级算法题 收藏 关注 给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s[0..k - 1]中的0的个数与子串s[k..n - 1]中1的个数相等。 注意: (1) 如果k = 0, s[0..k - 1]视为空串 (2) 如果k...

ZoneForZero 633

51nod 1100 斜率最大

平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。 (点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据中所有点的X轴坐标均不相等,且点坐标为随机。) Input 第1行,一个数N,N为点的数量。(2<=N<=10000) 第2-N+1行:具体N个点的坐标,XY均为整...

ZoneForZero 602

51nod 1640 天气晴朗的魔法 (图论,并查集)

51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动。 N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接起来,形成一个魔法阵。 魔法链是做法成功与否的关键。每一条魔法链都有一个魔力值V,魔法最终的效果取决于阵中所有魔法链的魔力值的和。 由于逆天改命的魔法过于暴力,所以我们要求阵中的魔法链的魔力值最大值尽可能的小,与此同时,魔力值之和要尽可...

ZoneForZero 568

hdu 1021 Fibonacci Again(取余规律水题)

Problem Description There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2). Input Input consists of a sequence of lines, each containing an integer n....

ZoneForZero 545

hdu 1108 最小公倍数(lcm)

Problem Description 给定两个正整数,计算这两个数的最小公倍数。 Input 输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数. Output 对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。 Sample Input 10 14 Sample Output 70 题意明确,没有坑点,1000*1...

ZoneForZero 537

51nod 1534 棋子游戏 ACM

波雷卡普和瓦西里喜欢简单的逻辑游戏。今天他们玩了一个游戏,这个游戏在一个很大的棋盘上进行,他们每个人有一个棋子。他们轮流移动自己的棋子,波雷卡普先开始。每一步移动中,波雷卡普可以将他的棋子从(x,y)移动到(x-1,y)或者(x,y-1)。而瓦西里可以将他的棋子从(x,y)移动到(x-1,y),(x-1,y-1)或者(x,y-1)。当然他们可以选择不移动。 还有一些其它的限...

ZoneForZero 500
上一篇: 51nod 1287 加农炮 acm
下一篇: 51nod 1534 棋子游戏 ACM
Zero丶圈圈
博客等级 码龄9年 6粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值