信奥一本通:1084:幂的末尾

本文介绍了一个C++程序,用于计算给定数值的幂并进行优化,确保结果始终是三位数且适当补零。通过for循环和取模操作实现高效的幂运算处理。

这题的难度在于理解什么幂,例如2的3次幂,也就是2*2*2,几次幂就是乘几次相同的数

但是如果数值太大,我们得将它优化出来,只保留三位数,所以% 1000就能办到

但是不足三位就要补0,所以我们要进行if判断

#include <iostream>
using namespace std;
int main(){
	int a,b,s=1;
	cin >> a >>b;
	for(int i = 1; i <= b;i++){
		s = s * a;
		s = s % 1000;
	}
	if (s >= 10 && s <= 99) cout << '0';
	if (s < 10) cout << "00";
	cout << s;
return 0;
}

息学一本题目3057的具体内容和解题思路没有直接提供,但可以根据常见的编程竞赛题目类型和解题策略进行推测和分析。题目3057可能涉及动态规划、图论或字符串处理等经典算法领域。 ### 解题思路 1. **题目理解**:首先需要明确题目要求。例如,如果题目涉及寻找最长公共子序列(LCS)或最长回文子序列等问题,常需要使用动态规划方法解决。 2. **动态规划**:如果是动态规划问题,常的解法是定义一个状态数组(或矩阵),用于存储中间结果以避免重复计算。例如,在最长上升子序列问题中,可以使用一维数组`dp`,其中`dp[i]`表示以第`i`个元素结尾的最长上升子序列的长度。 3. **优化策略**:对于某些特定问题,如最长上升子序列,可以使用二分查找来优化时间复杂度。具体来说,维护一个数组`tails`,其中`tails[i]`表示长度为`i+1`的上升子序列的最小可能末尾元素。 4. **代码实现**:根据题目要求编写代码,确保处理边界条件和输入输出格式正确。 ### 示例代码 假设题目是寻找最长上升子序列的长度,以下是一个可能的实现: ```cpp #include <bits/stdc++.h> using namespace std; int lengthOfLIS(vector<int>& nums) { vector<int> tails; for (int num : nums) { auto it = lower_bound(tails.begin(), tails.end(), num); if (it == tails.end()) { tails.push_back(num); } else { *it = num; } } return tails.size(); } int main() { vector<int> nums = {1, 7, 3, 5, 9, 4, 8}; cout << "Length of LIS: " << lengthOfLIS(nums) << endl; return 0; } ``` ### 复杂度分析 - **时间复杂度**:使用二分查找优化后的时间复杂度为$O(n \log n)$,其中$n$是序列的长度。 - **空间复杂度**:$O(n)$,用于存储`tails`数组。 ### 注意事项 - **输入处理**:确保输入数据的正确性,可能需要处理多组测试数据。 - **边界条件**:考虑空序列或所有元素递减的情况。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值