数据范围BZOJ 3209(花神的数论题-数位统计+1,被数据范围坑了)
PS:今天上午,非常郁悶,有很多簡單基礎的問題搞得我有些迷茫,哎,代碼幾天不寫就忘。目前又不當COO,還是得用心記代碼哦!
????
????
3209: 花神的數論題
????Time Limit:?
????10 Sec??
????Memory Limit:?
????128 MB
????Submit:?
????33??
????Solved:?
????18
????[
????Submit
????][
????Status
????][
????Discuss
????]
????
????
Description
????
背景
盡人皆知,花神多年來憑借無邊的神力狂虐各大 OJ、OI、CF、TC …… 當然也包含 CH 啦。
描述
話說花神這天又來講課了。課后按例有超級難的神題啦…… 我等蒟蒻又遭殃了。
花神的標題是這樣的
設 sum(i) 表現 i 的二進制表現中 1 的個數。給出一個正整數 N ,花神要問你
派(Sum(i)),也就是 sum(1)—sum(N) 的乘積。
?
????
Input
????
一個正整數 N。
?
????
Output
????
一個數,答案模 10000007 的值。
?
????
Sample Input
????
樣例輸入一3
????
Sample Output
????
樣例輸出一2
????
HINT
每日一道理微笑著,去唱生活的歌謠,不要埋怨生活給予了太多的磨難,不必抱怨生命中有太多的曲折。大海如果失去了巨浪的翻滾,就會失去雄渾;沙漠如果失去了飛沙的狂舞,就會失去壯觀。人生如果僅去求得兩點一線的一帆風順,生命也就失去了存在的意義。
????
?
對于樣例一,1*1*2=2;
數據范圍與約定
對于 100% 的數據,N≤10^15
?
????
Source
????
原創 Memphis
????
????[
????Submit
????][
????Status
????][
????Discuss
????]
????
????
????好吧……這題一開始的范圍是N<=1015
????然后我很天真的認為這不水嗎^?結果……
????好吧……
????之后要來數據以后才發明……
????n<=10^15
????只有我這類蒟蒻會被這個騙……
????
????被各種D……
????
????Ok,那么這題就是數位統計了……
????剛學的……(還在學這個<-弱)
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<functional> #include<cmath> #include<cctype> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define ForD(i,n) for(int i=n;i;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define RepD(i,n) for(int i=n;i>=0;i--) #define MAXN (100000) #define MAXL (50+10) #define F (10000007) int a[MAXN],len=0; long long C[MAXL][MAXL]; long long n; long long calc(int k) {long long ans=0;ForD(i,len){if (a[i]){ans+=C[i-1][k];k--;}if (k<0) return ans;}return ans; } long long pow2(long long a,long long b) {if (b==0) return 1;if (b==1) return a;long long tmp=pow2(a,b/2);tmp=tmp*tmp%F;if (b%2) tmp=(tmp*a)%F;return tmp; } int main() { // freopen("flower1.in","r",stdin); // freopen(".out","w",stdout);Rep(i,50){C[i][0]=1;For(j,i) C[i][j]=(C[i-1][j]+C[i-1][j-1]);}/*cout<<pow2(2,1001)<<endl;int pp=1;For(i,1001) pp=(pp*2)%F;cout<<pp;*/while (cin>>n){n++;//cout<<n<<endl;len=0;while (n) {a[++len]=n%2;n/=2;}long long ans=1;//cout<<len<<endl;For(i,len) ans=(ans*pow2(i,calc(i)))%F;printf("%lld\n",ans);};return 0; }????
????
????
文章結束給大家分享下程序員的一些笑話語錄: 聯想——對內高價,補貼對外傾銷的偉大“民族”企業。
--------------------------------- 原創文章 By
數據和范圍
---------------------------------
總結
以上是生活随笔為你收集整理的数据范围BZOJ 3209(花神的数论题-数位统计+1,被数据范围坑了)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字转化成时分秒(二)
- 下一篇: outlook恢复已删除邮件