二分法
Michael_XCH
这个作者很懒,什么都没留下…
展开
-
PAT 1044 Shopping in Mars
关键要点: 将这个数字序列转换成连续的求和序列sum[],所以这个求和序列sum[]必定是单增的。将寻找和值为S的连续子序列转化成寻找sum[i-1]+S的元素,如果存在,就找到对应右端点下标j;如果不存在,就找到第一个使和值大于S的右端点。 #include<cstdio> const int N=100010; int nearS=100000010; int sum[N]; //这里采用二分法 //upperbound函数返回在[L,R)内第一个大于x的位置 int upperboun原创 2020-05-18 15:14:59 · 115 阅读 · 0 评论 -
PAT 1010 Radix
解题思路: 将字符’0-9’和’a-z’映射到数组上面 定义字符串N转换成数的函数 定义比较两个字符串N1和N2转换后的数值的函数 编写二分查找函数,调用前面比较函数 查找字符串N2中各个位数上最大数 主函数里面确定N2的进制数最大和最小值 关键点: 进制数不止在0~35之间,可以非常大,超出int范围,所以建议使用 long long 作为数据类型。 在进制转换的时候,注意数据可能会溢出,所以比较两个转化后的数据需要考虑溢出的情况。 确定进制数是关键步骤,最小值应该就是N2各个位上最大值+1,最大值原创 2020-05-18 11:20:53 · 98 阅读 · 0 评论