topcoder srm 711 div1 -3
1、給出$n,k$,求一個(gè)大于等于$n$且最小的數(shù)字$m$使得$m$的二進(jìn)制表示中存在連續(xù)$k$個(gè)1 。
思路:如果$n$滿(mǎn)足,答案就是$n$。否則,依次枚舉連續(xù)1的位置判斷即可。
#include <iostream> #include <set> #include <stdio.h> #include <queue> #include <algorithm> #include <string.h> using namespace std;class ConsecutiveOnes { public:long long get(long long n,int k) {const int N=50;int a[N+5];a[0]=0;for(int i=1;i<=N;++i){a[i]=(n>>(i-1))&1;a[i]+=a[i-1];}for(int i=k;i<=N;++i) if(a[i]-a[i-k]==k) return n;long long ans=((n>>k)<<k)|((1ll<<k)-1);long long tmp=ans;for(int i=k;i<N;++i){if((tmp>>(i-k))&1) tmp^=1ll<<(i-k);tmp|=1ll<<i;if(tmp>=n&&tmp<ans) ans=tmp;}return ans;} };
2、給出一個(gè)整數(shù)$X=\prod_{i=0}^{n-1}p_{i}^{a_{i}}$,其中$p_{i}$表示第i個(gè)素?cái)?shù),比如$p_{0}=2,p_{1}=3$。問(wèn)有多少有序數(shù)列使得數(shù)列中每個(gè)數(shù)字大于1且所有數(shù)字的乘積等于$X$。當(dāng)$X=6$時(shí)有三個(gè),分別是{2,3},{3,2},{6}。其中$1\leq n \leq 50,1\leq a_{i} \leq 50$。
思路:令$f_{i}$表示將$X$表示成$i$個(gè)數(shù)乘積的方案數(shù)。那么$f_{i}=\prod_{k=0}^{n-1}g(a_{k},i)-\sum_{k=1}^{i-1}C_{i}^{k}f_{k}$。其中$g(i,j)$表示將$i$個(gè)蘋(píng)果放在$j$個(gè)籃子里的方案數(shù),$C_{i}^{j}$表示組合數(shù)。
那么答案$ans=\sum f_{i}$
#include <iostream> #include <map> #include <string> #include <stdio.h> #include <vector> #include <set> #include <algorithm> #include <string.h> #include <queue> using namespace std;const int N=3005; const int mod=1000000007;int C[N][N];int add(int x,int y) {x+=y;if(x>=mod) x-=mod;return x; }void init() {C[0][0]=1;for(int i=1;i<N;++i) {C[i][0]=1;for(int j=1;j<N;++j) {C[i][j]=add(C[i-1][j],C[i-1][j-1]);}} }int calC(int a,int b) {if(a<b) return 0;if(b+b>a) b=a-b;return C[a][b]; }int cal1(int a,int b) {return calC(a+b-1,b-1); }int dp[N];struct OrderedProduct {int count(vector<int> a){init();int s=0;const int n=(int)a.size();for(int i=0;i<n;++i) s+=a[i];int ans=0;for(int i=1;i<=s;++i) {dp[i]=1;for(int j=0;j<n;++j) dp[i]=(long long)dp[i]*cal1(a[j],i)%mod;for(int j=1;j<i;++j) dp[i]=add(dp[i],mod-(long long)calC(i,j)*dp[j]%mod);ans=add(ans,dp[i]);}return ans;} };
轉(zhuǎn)載于:https://www.cnblogs.com/jianglangcaijin/p/6632050.html
總結(jié)
以上是生活随笔為你收集整理的topcoder srm 711 div1 -3的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Tcl与Design Compiler
- 下一篇: php中的foreach和js中的for