20170810

来源:互联网 发布:网络爬虫的目的和意义 编辑:程序博客网 时间:2024/06/04 01:37

今天讲了些分治,以前接触过二分查找,现在看二分答案还算好理解,但是毕竟不熟。

先是练手写了快速幂。犯了很低级的错误,printf输出的时候变量之前又多加“&”,导致一直读取不对……

下一题是luogu2759,奇怪的函数。简单地说就是求令x^x为n位数的最小值,可以转化为求x^x>=10^y,即y<=xlog10x+1.

二分进行的条件,以后都写成left+1<right,可以避免考虑mid+1或-1的问题,在输出之前再验证就可以了。

觉得老师讲到二分的思想很有趣:

"二分答案是一种思路转换策略,我们一般要把一个很难的求解性问题转换为较简单的判断性问题。"

#include<bits/stdc++.h>using namespace std;int main(){long long ans;int n;scanf("%d",&n);long long Left=1,Right=2000000000,mid;while(Left+1<Right){mid=(Left+Right)/2;ans=1LL*mid*(log10(1.0*mid))+1;if(ans>=n) Right=mid;else Left=mid;}ans=1LL*Left*(log10(1.0*Left))+1;if(ans==n) cout<<Left;else cout<<Right;return 0;}
也卡了很久,主要是没有好好考虑到变量ans和mid的范围,用int是会越界的。再记一下零碎的知识……*1LL是强制转long long,*1.0强制转精度,英文单词命名的变量为了防止和库里冲突,尽量开头字母大写。

要试着熟悉函数的使用,会方便也容易检查很多。

然后是,跳石头,理解起来还是有困难,而且没过,姑且放到明天a了再总结吧。

原创粉丝点击