- 李奕樊 的博客
CSP-J复赛2022题解之1.pow
- 2023-10-16 14:33:52 @
CSP-J 2022复赛题解
前言
马上复赛了, 行李有点慌张, 做做去年的真题吧, 最讨厌 和 了
第一题 pow
题面链接
得分情况
思路
求的值,第一想到的是pow函数,可是数据范围是 , 绝对会超pow函数的范围。那就只能自己写乘方了!!
正常我们求幂都是循环次,每次,可是看到数据范围,可是程序限制是也就是。
既然判断如果结果大于就输出,就可以在每一次循环里判断是否大于,如果是就输出,退出程序。再来分析一下,除去,要特判,如果是,就直接输出。
那么进入循环的条件是 ,取它等于,大于,当循环到 的时候就会退出,越大,循环次数越小,对时间没有影响! 最后记得写freopen!
启示
第一题一般不会用太难的方法,可以大胆模拟。模拟完,再计算其时间复杂度、空间复杂度,如果觉得很大可能会超,可以进一步优化,比如,换输入方式,快读快写等
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e9;
long long ans=1;
int main(){
// freopen("pow.in", "r", stdin);
// freopen("pow.out", "w", stdout);
int a, b;
scanf("%d%d", &a, &b);
if(a == 1) {
printf("1\n");
return 0;
}
for(int i = 1; i <= b; i++){
ans *= a * 1LL;
if(ans > N){
printf("-1\n");
return 0;
}
}
printf("%lld", ans);
return 0;
}
最后
没有最后