本文主要是介绍Zoj 3629 Treasure Hunt IV,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:点击打开链接
找规律题。
完全没有想到,这是一个规律题。
一开始的想法就是,一个数论题目。不过就是不知道,怎么弄出答案。
在这种情况下,我们应该换一种思路。
我想,可能有些队,会因为数据的庞大就放弃了对题目的深入了解。我以前的做法就是这样的。所以,需要改正。
对于如果可规律的题目,我们可以打出容许范围内的数据进行观察找规律。
对于该题目:
打出前1000项观察:
[1^2,2^2)=1=1*1;
[3^2,4^2)=6=3*2;
[5^2,6^2)=15=5*3;
[7^2,8^2)=28=7*4;
[9^2,10^2)=45=9*5;
[11^2,12^2)=66=11*6;
....=(2*n-1)*n;(n为底几组?n=sqrt(x)/2)
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define LL long longLL f(LL x){if(x==-1) return 0;LL n=(LL)sqrt(x),ans;if(n%2){//在某一连续的区间(相同)ans=n*(n+1)/2;}else {//(非同)LL tmp=(n-1)*n/2;LL num=x-n*n;ans=tmp+num+1;}return ans;
}int main(){LL a,b,n;while(~scanf("%lld%lld",&a,&b)){printf("%lld\n",f(b)-f(a-1));}return 0;
}
无语。
这篇关于Zoj 3629 Treasure Hunt IV的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!