日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

hdu 4588 Count The Carries 南京邀请赛

發布時間:2024/2/28 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 4588 Count The Carries 南京邀请赛 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目意思:求a~b 之間數二進制的和 求 ?進了多少位。

比如 ?1~3 ? ? 01+10+11=22 ? 22->30->110 進了 2位


要尋找規律,發現 ?加到3的時候為22 ?加到7的時候為444 ?猜測下 ?加到15的時候為8888這樣就找到規律了 ?2^p-1

之后 只要whlle一下就好了

還有本題用long long的話 會答案錯誤,用_int64會正確。

#include <iostream> #include <cstdio> #include<cstring> #include<algorithm> using namespace std; __int64 ans[1000]; __int64 int anum[1000]; __int64 int bnum[1000]; void cal(__int64 x,__int64 a[]) {int p=30,i;while(x>0){while(x<((1<<p)-1))p--;for(i=0;i<p;i++) a[i]+=1<<(p-1);a[p]+=x+1-(1<<p);x-=1<<p;} } int main() {__int64 a,b;while(scanf("%I64d%I64d",&a,&b)!=EOF){int i;memset(ans,0,sizeof(ans));memset(anum,0,sizeof(anum));memset(bnum,0,sizeof(bnum));cal(a-1,anum);cal(b,bnum);for(i=0;i<=50;i++)ans[i]=bnum[i]-anum[i];__int64 anstime=0;for(i=0;i<=50;i++){anstime+=ans[i]>>1;ans[i+1]+=ans[i]>>1;}printf("%I64d\n",anstime);} }


總結

以上是生活随笔為你收集整理的hdu 4588 Count The Carries 南京邀请赛的全部內容,希望文章能夠幫你解決所遇到的問題。

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