日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

超级变变变

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超级变变变 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description
經過一系列的游戲之后,你終于迎來了今天的作業,第一個作業是預習一個超級美好的函數f(x),描述如下。

為了研究這個函數的性質,你決定定義一次變化為x=f(x)。

若x就經過若干次變化為k,則你就會覺得這是一個k變變數。

現在既然你已經這么覺得了,那就只好給定A,B,求有多少個A<=x<=B是k變變數了。

Input
輸入包含三行。

第一行為一個整數k。

第二行為一個整數A。

第三行為一個整數B。

Output
輸出僅一行,表示答案。

Sample Input
Sample Input 1
13
12345
67890123

Sample Input2
1
234567
1234567

Sample Output
Sample Output1
8387584

Sample Output2
1000001

Data Constraint

Hint
對于50%的數據,0<=k,A,B<=10^6
對于100%的數據,0<=k,A,B<=10^18 A<=B

.
.
.
.
.
分析
對于一個k,我們可以知道,它可以是由2 * k和2 * k+1變化得來的
而2 * k又是由2 * 2*k和2 * 2 * k+1變化得來的
同時2 * k+1又是由2 * (2 * k+1)和2 * (2 * k+1)+1變化得來的
以此類推,我們就可以得到一棵二叉樹
其中,每一層的數字都是連續的,樹上的每一個數字都可以通過變化得出k
利用這個性質,我們可以通過判斷每一層有多少個數字在a~b的范圍內從而逐層累加的出答案

然而,當k為偶數時
k不僅能由2 * k和2 * k+1變化得來,同時也能由k+1變化得來
因此,當k為偶數時,答案的統計也應該加上k+1的答案

由于任何數都可以變化得到0、1、2
所以,當k=0或1或2時,可以直接輸出答案

要注意k有可能大于a
所以答案的統計范圍為max(a,k)~b

.
.
.
.
.
.
程序:

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std;int main() {long long k,a,b;scanf("%lld",&k);scanf("%lld",&a);scanf("%lld",&b);a=max(k,a);if (k==0||k==1||k==2){printf("%lld",b-a+1);return 0;}long long ans=0,ta=k,tb=k;while (ta<=b){if (ta>=a){if (tb<=b) ans+=tb-ta+1;if (tb>b) ans+=b-ta+1;}if (ta<a){if (tb>b) {ans+=b-a+1;break;}}ta=(long long)ta*2;tb=(long long)tb*2+1;}if (k%2==0){k++;long long ta=k,tb=k;while (ta<=b){if (ta>=a){if (tb<=b) ans+=tb-ta+1;if (tb>b) ans+=b-ta+1;}if (ta<a){if (tb>b) {ans+=b-a+1;break;}}ta=(long long)ta*2;tb=(long long)tb*2+1;}}printf("%lld",ans);return 0; }

轉載于:https://www.cnblogs.com/YYC-0304/p/10458949.html

總結

以上是生活随笔為你收集整理的超级变变变的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。