Treasure Hunt IV

来源:互联网 发布:四川旅游学院教务网络 编辑:程序博客网 时间:2024/06/05 08:35

Alice is exploring the wonderland, suddenly she fell into a hole, when she woke up, she found there are b - a + 1 treasures labled a from b in front of her.
Alice was very excited but unfortunately not all of the treasures are real, some are fake.
Now we know a treasure labled n is real if and only if [n/1] + [n/2] + … + [n/k] + … is even.
Now given 2 integers a and b, your job is to calculate how many real treasures are there.

Input

The input contains multiple cases, each case contains two integers a and b (0 <= a <= b <= 263-1) seperated by a single space. Proceed to the end of file.

Output

Output the total number of real treasure.

Sample Input

0 2
0 10
Sample Output

1
6
打表发现了规律……每次都是在平方数转奇偶变换,找到规律这就是个水题。

#include<cstdio>#include<cstring>#include<iostream>#include<queue>#include<vector>#include<algorithm>#include<string>#include<cmath>#include<set>#include<map>#include<vector>using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;const int maxn = 1005;ll check(ll x){    ll ans = 0;    ll temp = sqrt(x);    if (x == 0)return 1;    if (temp % 2 == 0)    {        ans = (temp - 2)*(temp + 1) / 2;        ans = ans + x - temp*temp + 1;    }    else if (temp % 2)    {        ans = (temp - 1)*(temp + 2) / 2;    }    return ans + 1;}int main(){    ll a, b, ans;    while (scanf("%lld%lld", &a, &b) != EOF)    {        if (a == 0)            ans = check(b);        else            ans = check(b) - check(a - 1);        cout << ans << endl;    }    return 0;}
0 0
原创粉丝点击