USACO kimbits
来源:互联网 发布:qpst找不到手机端口 编辑:程序博客网 时间:2024/06/03 17:35
题目大意:要你求出长度为n,1的个数小于等于l的第i个数(从小到大)
分析:我们从最高位开始判断是否为0,我们可以求出最高位为0的数的方案有多少个(排列组合。。。)如果大于等于当前的名次,则这一位必定是0,否则为1,再减去为0的个数即为新的名次。
收获:求第几大的问题可以考虑从小到大看每一类有多少个一步一步地确定。
/*ID: d2947901PROG: kimbitsLANG: C++*/#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream>#include<vector>#include<queue>#define X first#define Y second#define MP make_pair#define LL long long#define pb push_back#define pii pair<int,int>#define DEBUG(...) fprintf(stderr,__VA_ARGS__)const int MAXN=32;using namespace std;LL l,n,r;vector<LL> ans;LL G[MAXN][MAXN],F[MAXN][MAXN],c[MAXN][MAXN];LL get(int k,int num){ LL res=0; for(int i=0;i<=num;i++) res+=c[k-1][i]; return res; }int main(){ freopen("kimbits.in","r",stdin); freopen("kimbits.out","w",stdout); cin>>l>>n>>r; c[0][0]=1; for(int i=1;i<=l;i++) { for(int j=0;j<=i;j++) { if(j==0||j==i)c[i][j]=1; else { c[i][j]=c[i-1][j]+c[i-1][j-1]; } } } LL cnt=0; for(int i=1;i<=l;i++) { LL now=get(l-i+1,n-cnt); if(r<=now) ans.pb(0); else { r-=now; ans.pb(1); cnt++; } } for(int i=0;i<ans.size();i++) printf("%d",ans[i]); puts("");}
0 0
- USACO kimbits
- USACO/kimbits 3.2.2
- USACO 3.2 Stringsobits (kimbits)
- USACO算法系列九——kimbits
- usaco3.2kimbits
- USACO3.2.2 Stringsobits (kimbits)
- USACO3.2.2 Stringsobits (kimbits)
- USACO
- USACO
- usaco
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- USACO
- 表单提交ajax实现
- 总结
- [Mac入门]如何在Mac下显示Finder中的所有文件
- ubuntu下插上网线但是无法使用有线网络的解决办法
- Weather report
- USACO kimbits
- C# — WinForm DataGridView篇
- 棋盘格的角点标定与相机参数标定
- Matlab"out of memory"问题
- VMware12 安装 OS X 10.10 详细教程
- ubuntu 中 邮箱消息通知
- 还是性能优化专题
- Ants
- C# — WinForm TreeView篇