信息学奥赛复赛复习16-CSP-J2022-01乘方-循环特判、pow函数、快速幂

news2024/10/12 19:18:08
PDF文档回复:20241012

此前解析题,P8813 [CSP-J 2022] 乘方,给出了循环的解题思路,当时在洛谷提交是通过的,后台收到留言,a=1,b=1e9会炸吧?,确实啊整除要求1s内循环次数最大可以到10^7,现在测试数据明显大很多,按测试数据有这个可能,没想到CSP普及组第1题竟然翻车,去CCF官网去找测试数据,竟然没有2022年的测试数据,去另外一个OJ上面测试了一下,竟然有超时测试用例

提交原码

#include<bits/stdc++.h>
using namespace std;
const int N=1e9;//允许的最大值 超出输出-1 
int a,b;//输入a b 
long long m=1;//存储 a^b 
int main(){
	cin>>a>>b;//输入a b
	for(int i=0;i<b;i++){//循环b次 
		m=m*a;//m从1开始每次乘以a 
		if(m>N){//如果大于允许的最大值 输出-1 
			cout<<"-1";			
			return 0;//退出程序 
		}
	}
	cout<<m;//输出 a^b 
	return 0;
}

分析

确实a=1的时候,b可以比较大,最后也需要循环结束才计算出结果,如果a不是1,循环次数就大大减少

可以分情况讨论 a=1和a!=1

下面给出3种方法

1 循环特判

#include<bits/stdc++.h>
using namespace std;
const int N=1e9;//允许的最大值 超出输出-1 
int a,b;//输入a b 
long long m=1;//存储 a^b 
int main(){
	cin>>a>>b;//输入a b
	if(a==1){
		cout<<"1";
		return 0;
	} 
	for(int i=0;i<b;i++){//循环b次 
		m=m*a;//m从1开始每次乘以a 
		if(m>N){//如果大于允许的最大值 输出-1 
			cout<<"-1";			
			return 0;//退出程序 
		}
	}
	cout<<m;//输出 a^b 
	return 0;
}

2 用快速幂解法

如下用快速幂改造后的程序,不在超时,可以顺利通过

#include <bits/stdc++.h>
using namespace std;
const int N=1e9;
long long a,b,ans=1;
long long quickpow(long long a, long long b) {
    while (b) {
        if (b & 1) {
            ans = ans * a;
        }
        if(a>N) return -1;
        if (ans > N) return -1;
        a *= a;
        b >>= 1;
    }
    return ans;
}

int main() {
    cin >> a >> b;
	cout << quickpow(a, b) << endl;	
    return 0;
}
/*
输入 
1 992465817
输出
1 
*/ 

普及组第1题用快速幂有点过分了,看看还有没有其他解法

3 pow函数解法

#include<bits/stdc++.h>
using namespace std;
const int N=1e9;//允许的最大值 超出输出-1 
int a,b;//输入a b
double ans; 
int main(){
	cin>>a>>b;//输入a b
	ans=pow(a,b);
	if(ans>N){
		cout<<-1<<endl;
	}else{
		cout<<(int)ans;//输出 a^b	
	}
	return 0;
}
/*
输入 
1 992465817
输出 
1
*/ 

可以顺利通过

这里顺便说一些pow函数

C++中有自带的pow()函数,具有求指定底数的指定幂值。通常使用该函数求解幂

实现原理为快速幂,时间复杂度为O(logN)

#include<iostream>
#include<cmath>
using namespace std;
/*
  pow函数
  该函数接收两个参数,base 为要取次方的数,exponent 为指数。返回结果为 base 的 exponent 次方 
  double x =pow(base,exponent);
  pow=(2,3)=8 
*/ 
int main(){
	int base=2;
	int exponent=3;
	double x=pow(base,exponent);
	cout<<x<<endl;
	exponent=4;
	x=pow(base,exponent);
	cout<<x<<endl;
	return 0;
}
/*
输出
8
16 
*/ 

如下为原题

[题目描述]

小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 a 和 b,求 a^b 的值是多少。

a^b 即 b 个 a 相乘的值,例如 2^3 即为 3 个 2 相乘,结果为 2×2×2=8

“简单!”小文心想,同时很快就写出了一份程序,可是测试时却出现了错误

小文很快意识到,她的程序里的变量都是 int 类型的。在大多数机器上,int 类型能表示的最大数为 2^31−1,因此只要计算结果超过这个数,她的程序就会出现错误

由于小文刚刚学会编程,她担心使用 int 计算会出现问题。因此她希望你在 ab 的值超过 10^9 时,输出一个 -1 进行警示,否则就输出正确的 a^b 的值

然而小文还是不知道怎么实现这份程序,因此她想请你帮忙

[输入格式]

输入共一行,两个正整数 a,b

[输出格式]

输出共一行,如果 a^b 的值不超过 10^9,则输出 a^b 的值,否则输出 -1

[输入输出样例]

输入 #1

10 9

输出 #1

1000000000

输入 #2

23333 66666

输出 #2

-1

说明/提示

数据规模

对于 10% 的数据,保证 b=1。
对于 30%的数据,保证 b≤2。
对于 60% 的数据,保证 b≤30,a^b≤ 10^18。
对于 100% 的数据,保证 1≤a,b≤10^9。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2208574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信自动化工具,让多微管理更轻松更高效!

对于多个微信账号的管理&#xff0c;往往会让人感到繁琐和耗时。 这时&#xff0c;通过个微管理系统实现微信自动化设置&#xff0c;将大大提升我们的管理效率。 1、批量自动加好友 只需将客户号码一次性导入系统&#xff0c;设置好加好友规则&#xff0c;系统便会自动发送加…

PS文件保存后突然消失?别急,这里有7种解决方案!

咨询&#xff1a;“我刚做完的PS文件&#xff0c;保存得好好的&#xff0c;怎么就突然消失了呢&#xff1f;连回收站里都没有&#xff0c;这可怎么办才好。” 面对PS&#xff08;Photoshop&#xff09;文件在保存后突然消失的情况&#xff0c;许多设计师和图像处理爱好者可能会…

List的实现类

1.ArrayList&#xff08;数组&#xff09; &#xff08;1&#xff09;代码 新建学生类&#xff1a; package com.collection;public class Student {private String name;private int age;//添加构造方法 都是使用altenter快捷键public Student() {this.name name;this.age…

OCR经典神经网络(二)文本检测算法DBNet算法原理及其在icdar15数据集上的应用

OCR经典神经网络(二)文本检测算法DBNet算法原理及其在icdar15数据集上的应用 场景文本检测任务&#xff0c;一直以来是OCR整个任务中最为重要的一环。虽然有一些相关工作是端对端的&#xff0c;但是从工业界来看&#xff0c;相关落地应用较为困难。因此&#xff0c;两阶段的OC…

RUM性能优化之图片加载

作者&#xff1a;三石 在现代Web开发中&#xff0c;图片作为内容表达的核心元素&#xff0c;其加载效率直接影响到页面的整体性能和用户体验。随着高清大图和动态图像的普及&#xff0c;优化图片加载变得尤为重要。RUM作为一种主动监测技术&#xff0c;能够帮助开发者从真实用户…

【Linux-基础IO】软硬链接+动静态库

一、软硬链接 见一见 软连接 硬连接 通过观察我们发现以下几点&#xff1a; 1.ll - i后&#xff0c;软连接形成的文件有指向&#xff0c;并且软连接的Inode编号与对应文件的Inode编号不一样 2.ll - i后&#xff0c;硬连接形成的文件与对应的文件Inode编号一样 3.软连接…

贪心+dfs,CF 1975D - Paint the Tree

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1975D - Paint the Tree 二、解题报告 1、思路分析 我们从树中一点出发&…

【uni-app】HBuilderX安装uni-ui组件

目录 1、官网找到入口 2、登录帐号 3、打开HuilderX 4、选择要应用的项目 5、查看是否安装完成 6、按需安装 7、安装完毕要重启 8、应用 前言&#xff1a;uniapp项目使用uni-ui组件方式很多&#xff0c;有npm安装等&#xff0c;或直接创建uni-ui项目&#xff0c;使用un…

汽车免拆诊断案例 | 2013款宝马116i车偶尔加速不良

故障现象  一辆2013款宝马116i车&#xff0c;搭载N13B16A 发动机&#xff0c;累计行驶里程约为12.1万km。车主反映&#xff0c;该车行驶中偶尔加速无反应&#xff0c;且发动机故障灯异常点亮。 故障诊断 接车后试车&#xff0c;故障现象无法再现。用故障检测仪检测&#xff…

[论文阅读] MoAI: Mixture of All Intelligence for Large Language and Vision Models

原文链接&#xff1a;http://arxiv.org/abs/2403.07508 源码链接&#xff1a;https://github.com/ByungKwanLee/MoAI 启发&#xff1a;这篇文章提供一个比较新奇的思路&#xff0c;将传统CV小模型的输出进行语言化&#xff0c;转换成统一格式&#xff0c;传入到后续的模型中&…

8. Control Station Studio控制站开发平台概述

更多内容见CSDN博客专栏&#xff1a;无人机飞控 相关资源&#xff1a;https://gitee.com/ss15/ph47 8.1. 概述 Ground Control Station&#xff08;CSS&#xff09;是一个地面站软件开发平台&#xff0c;通过对控制站工程的设计搭建&#xff0c;从而开发出面向各种不同用途&a…

【软件测试】基本知识2

一、能对穷举场景设计测试点——等价类划分法 说明&#xff1a;在所有测试数据中&#xff0c;具有某种共同特征的数据集合进行划分 分类 有效等价类&#xff1a;满足需求的数据集合无效等价类&#xff1a;不满足需求的数据集合 步骤 明确需求确定有效和无效等价类提取数据编写…

linux使用xhell连接特别慢

linux使用xhell连接特别慢 在此记录一下 1.vi /etc/ssh/sshd_config&#xff0c;修改如下配置 GSSAPIAuthentication yes 修改 no UseDNS yes 修改 no 2.重新启动sshd服务 systemctl restart sshd

从混乱到卓越:六西格玛是如何助力企业摆脱困境的

六西格玛&#xff0c;这一源自摩托罗拉、发扬于通用电气的管理方法&#xff0c;以其严谨的数据分析、持续改进的理念&#xff0c;成为了企业转型升级的利器。它不仅仅是一套工具和方法论&#xff0c;更是一种追求卓越的文化和思维方式。在六西格玛的视角下&#xff0c;企业的一…

基于yolov8、yolov5的鸟类检测系统(含UI界面、数据集、训练好的模型、Python代码)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型。模型十分重要&#xff0c;因为有些同学的电脑没有 GPU&#xff0…

当下流行的【疗愈】是什么?疗愈门店未来发展前景分析|个案疗愈系统源码私

▶ 「疗愈」是什么&#xff1f; 疗愈通常指的是一种综合性的治疗方法&#xff0c;旨在帮助人们恢复身心健康、平衡和内在和谐。可能包括心理治疗、身体疗法、能量疗法、草药疗法、冥想和其他练习&#xff0c;以促进个体的整体健康和福祉。 疗愈的具体内容和方法会因不同的文化…

论文笔记:Pre-training to Match for Unified Low-shot Relation Extraction

论文来源&#xff1a;ACL 2022 论文地址&#xff1a;https://aclanthology.org/2022.acl-long.397.pdf 论文代码&#xff1a;https://github.com/fc-liu/MCMN &#xff08;笔记不易&#xff0c;请勿恶意转载抄袭&#xff01;&#xff01;&#xff01;&#xff09; 目录 A…

IDEA下面的Services不见了(解决方案)

大家使用IDEA有时候新打开个项目这个东西不会自动出现如何解决 配置方法&#xff1a; 右上角打开进入Edit Configurations 进入后我们看到里面是没有SpringBoot相关内容的 点击加号选择SpringBoot 然后Apply Ok即可&#xff0c;现在IDEA下面就会出现Service了&#xff0c;打…

海外盲盒系统开发,开拓海外盲盒市场

近几年&#xff0c;盲盒出海成为热潮&#xff0c;吸引着众多企业转向海外布局&#xff01;国内盲盒市场逐渐饱和&#xff0c;反而海外市场存在着巨大的商机&#xff0c;这促使着各大企业开始向海外发展。这几年中&#xff0c;海外盲盒市场也创造出了越来越多的惊喜&#xff0c;…

Cesium 贴地圆 并显示外轮廓线 outline

老规矩&#xff1a;直接放效果图&#xff0c;符合就往下看&#xff0c;不符合出门右转。 cesium官方暂时未提供贴地的圆&#xff0c;添加外轮廓线。 思路能不能写glsl更改材质&#xff0c;让图形显示外轮廓线。设置一个阈值距离圆心距离定值内显示一种颜色&#xff0c;超过这个…