魔道研究
2016-03-05 16:33
363 查看
题目大意
有3*10^5个多重集合,许多次操作,每次操作往某个集合里插入一个数。对于所有i,把第i个集合里前i大的元素加入集合S中。每次操作后你需要输出集合S中前N大元素的和。模拟
模拟题意,用数据结构维护即可。这里使用spaly。
[code]#include<cstdio> #include<algorithm> #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; typedef long long ll; const ll mo=1000000007; ll flag[10][10]={ {1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }, {1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }, {1 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }, {1 ,2 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 }, {1 ,2 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 }, {1 ,1 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 }, {1 ,0 ,2 ,0 ,0 ,0 ,1 ,0 ,0 ,0 }, {1 ,3 ,0 ,2 ,1 ,0 ,0 ,1 ,0 ,0 }, {1 ,2 ,1 ,1 ,0 ,2 ,0 ,0 ,1 ,0 }, {1 ,4 ,0 ,4 ,2 ,0 ,0 ,4 ,0 ,1 } },dt1[10]={12,9,6,6,6,3,0,3,0,0} ,dt2[10]={4 ,2,1,1,0,0,0,0,0,0}; ll c[30][30],f[250][250][20]; ll i,j,k,l,r,t,n,m,ans; int main(){ freopen("magic.in","r",stdin);freopen("magic.out","w",stdout); scanf("%lld%lld",&n,&m); f[0][0][0]=1; f[0][1][1]=4;f[0][1][2]=4; f[0][2][3]=4;f[0][2][4]=2;f[0][2][5]=8;f[0][2][6]=2; f[0][3][7]=4;f[0][3][8]=4; f[0][4][9]=1; c[0][0]=1; fo(i,1,14){ c[i][0]=1; fo(j,1,i) c[i][j]=(c[i-1][j]+c[i-1][j-1])%mo; } fo(i,0,n-1) fo(j,0,m) fo(k,0,9) if (f[i][j][k]) fo(l,0,9) if (flag[k][l]) fo(t,0,dt2[l]) if (j+t<=m) fo(r,0,dt1[l]-2*t) if (j+t+r<=m){ f[i+1][j+t+r][l]+=f[i][j][k]*flag[k][l]*c[dt2[l]][t]*c[dt1[l]-2*t][r]; f[i+1][j+t+r][l]%=mo; } fo(j,0,9) ans=(ans+f [m][j])%mo; fo(i,1,m) ans=ans*i%mo; printf("%lld\n",ans); fclose(stdin);fclose(stdout); return 0; }
相关文章推荐
- 我终于深入参与了一个分布式系统了,好多想法不一样了
- [LeetCode]41 第一个缺失的整数
- 位运算:二进制中1的个数
- JavaScript常用代码(不定时更新)
- 网络-NSURLSession应用和原理
- 字符串匹配
- Android面试题搜集
- LeetCode : String to Integer (atoi) [java]
- 关于enum与typedef enum的用法小结
- LeetCode题解--2-Add Two Numbers
- 37. Sudoku Solver *HARD*
- 由SequenceFile.Writer(key,value)谈toString()方法
- 笔记:继承设计的技巧
- C#连接数据库代码(基础)
- NSRULConnection网络应用
- EF(EntityFramework) 的 CodeFirst 使用指南二(基本使用)
- HBase -ROOT-和.META.表结构(region定位原理)
- php编写的抽奖程序中奖概率算法
- 解决Chrome插件安装时出现的“程序包无效”问题
- Mac安装Myeclipse2015开发环境