2022 CSP J 入门级 T1和T2题解

简介: 2022 CSP J 入门级 T1和T2题解

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

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

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

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

由于小文刚刚学会编程,她担心使用 int 计算会出现问题。因此她希望你在 a^b 的值超过 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。

注意哈,这道题一定要用longlong!!!还需要特判一下,当>1e9后,就跳出循环!!!

AC代码:

include<bits/stdc++.h>

using namespace std;
int main()
{

long long int a,b,c=1,d=0;//注意开longlong
cin>>a>>b;
for(int i=0;i<=b-1;i++)
{
    c*=a;
    if(c>1e9) //判断一下
    {
        cout<<"-1";//输出
        d++;//为了判断是否要输出c
        break;//跳出循环
    }
}
if(d==0) cout<<c;

}

第一题还是很简单的,之后的每道题都用到了算法

T2:P8814 解密
题目描述
给定一个正整数 k,有 k 次询问,每次给定三个正整数 ni​,ei​,di​,求两个正整数pi​,qi​,使ni​=pi​×qi​、ei​×di​=(pi​−1)(qi​−1)+1。

输入格式
第一行一个正整数 k,表示有 k 次询问。

接下来 k 行,第 i 行三个正整数ni​,di​,ei​。

输出格式
输出 k 行,每行两个正整数 pi​,qi​ 表示答案。

为使输出统一,你应当保证 pi​≤qi​。

如果无解,请输出 NO。

输入输出样例
输入 #1

10
770 77 5
633 1 211
545 1 499
683 3 227
858 3 257
723 37 13
572 26 11
867 17 17
829 3 263
528 4 109
输出 #1

2 385
NO
NO
NO
11 78
3 241
2 286
NO
NO
6 88
【数据范围】

以下记 m=n−e×d+2。

保证对于 100% 的数据,1≤k≤105,对于任意的 1≤i≤k,1≤ni​≤10e18,1≤ei​×di​≤10e18 ,1≤m≤109。

测试点编号 k≤ n≤ m≤ 特殊性质
1 10^3 10^3 10^3 保证有解
2 10^3 10^3 10^3 无
3 10^3 10^9 6×10^4 保证有解
4 10^3 10^9 6×10^4 无
5 10^3 10^9 10^9 保证有解
6 10^3 10^9 10^9 无
7 10^5 10^18 10^9 保证若有解则p=q
8 10^5 10^18 10^9 保证有解
9 10^5 10^18 10^9 无
10 10^5 10^18 10^9 无
这道题我的方法是用二分

首先,注意审题,ni​=pi​×qi​、ei​×di​=(pi​−1)(qi​−1)+1,这个是可以化简的,,即,在转换一下,得,这里,就会发现pi+qi=m(在数据范围里可以看到),之后,就可以用二分,列pi,再用m-pi算出qi,最后判断下就ok了。

AC代码:

include<bits/stdc++.h>

using namespace std;
int O=100001;
long long int erfen(long long int a,long long int b,long long int c)
{

long long int d=a-b*c+2;
long long int l=1,r=d/2,mid;
while(l<=r)
{
    mid=l+((r-l)/2); 
    if(mid*(d-mid)<a) l=mid+1;
    else r=mid-1;
}
return l;

}
int main()
{

long long int k,n[O],d[O],e[O];
cin>>k;
for(int i=0;i<=k-1;i++)
{
    cin>>n[i]>>d[i]>>e[i];
    long long int j=erfen(n[i],d[i],e[i]);
    long long int q=n[i]-d[i]*e[i]+2-j;
    if(j*q==n[i]) 
    {
        if(j<=q) cout<<j<<" "<<q;
        else cout<<q<<" "<<j;
    }
    else cout<<"NO";
    cout<<endl;
}

}

相关文章
|
8月前
|
算法
[优选算法专栏]专题十五:FloodFill算法(一)
[优选算法专栏]专题十五:FloodFill算法(一)
76 0
|
8月前
|
算法
[优选算法专栏]专题十五:FloodFill算法(二)
[优选算法专栏]专题十五:FloodFill算法(二)
52 0
|
8月前
|
网络协议 Java 网络安全
【JavaEE初阶】 初识网络原理
【JavaEE初阶】 初识网络原理
|
8月前
|
安全 Java 程序员
火爆全网的Spring Security手册及源码笔记,在Github上标星103K
Spring Security 是一个基于 Spring AOP 和 Servlet 过滤器的安全框架,它提供了安全性方面的解决方案
阿里6月面试原题出炉:Spring+SpringMvc+MyBatis(附答案)
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
|
算法 Java
【JavaSE成神之路】数组思考题讲解
哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是数组的思考题讲解,也就是上一节我留下的两个小作业。
113 0
|
XML 前端开发 JavaScript
带你吃透Servlet核心编程下篇(完整图文教程)(上)
文章目录 1 Http协议 1.1 什么是 HTTP 协议 1.2 GET请求与POST请求 1.3 响应的HTTP协议格式 1.4 MIME数据类型 2 HttpServletRequest类 2.1 HttpServletRequest说明及常用方法 2.2 HttpServletRequest类演示 2.3 获取请求表单中的参数值(POST请求) 2.4 解决post请求中的中文乱码问题 3 请求转发 4 HttpServletResponse类 4.1 两个输出流 4.2 如何回传客户端数据 5 请求重定向 5.1 什么是请求重定向 5.2 请求重定向演示
带你吃透Servlet核心编程下篇(完整图文教程)(上)
带你吃透Servlet核心编程下篇(完整图文教程)(下)
文章目录 1 Http协议 1.1 什么是 HTTP 协议 1.2 GET请求与POST请求 1.3 响应的HTTP协议格式 1.4 MIME数据类型 2 HttpServletRequest类 2.1 HttpServletRequest说明及常用方法 2.2 HttpServletRequest类演示 2.3 获取请求表单中的参数值(POST请求) 2.4 解决post请求中的中文乱码问题 3 请求转发 4 HttpServletResponse类 4.1 两个输出流 4.2 如何回传客户端数据 5 请求重定向 5.1 什么是请求重定向 5.2 请求重定向演示
带你吃透Servlet核心编程下篇(完整图文教程)(下)
|
XML 应用服务中间件 数据格式
带你吃透Servlet核心编程下篇(完整图文教程)(中)
文章目录 1 Http协议 1.1 什么是 HTTP 协议 1.2 GET请求与POST请求 1.3 响应的HTTP协议格式 1.4 MIME数据类型 2 HttpServletRequest类 2.1 HttpServletRequest说明及常用方法 2.2 HttpServletRequest类演示 2.3 获取请求表单中的参数值(POST请求) 2.4 解决post请求中的中文乱码问题 3 请求转发 4 HttpServletResponse类 4.1 两个输出流 4.2 如何回传客户端数据 5 请求重定向 5.1 什么是请求重定向 5.2 请求重定向演示
带你吃透Servlet核心编程下篇(完整图文教程)(中)
|
小程序 Java 应用服务中间件
带你吃透Servlet核心编程上篇(完整图文教程)(上)
文章目录 1 走进Servlet 1.1 Servlet简介 1.2 第一个Servlet程序 1.3 Servlet程序如何定位到url地址 1.4 Servlet的生命周期方法 1.5 Servlet请求的分发处理 1.6 通过继承HttpServlet类实现Servlet程序 2 Servlet体系 2.1 Servlet继承体系 2.2 ServletConfig类的使用
带你吃透Servlet核心编程上篇(完整图文教程)(上)