题意:给你52张牌,已知一个牌的序列,然后利用剩余的牌,能排成多少个序列,这个序列比已知的序列字典序小。

思路:从左到右尽可能放比已知序列相应位置小,找不到就放一样,然后求组合数就可以。多重集排列定理:令s时一个多重集,有k个不同类型的元素,各元素的重数分别为n1,n2......nk,令s的大小为n=n1+n2+......nk,则s的排列数为    n!/(n1!*n2!.....nk!);

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#define ll long long
#define maxn 100010
using namespace std;
const int mod=; char str[maxn];
int num[maxn];
ll f[maxn];
map<char,int>q; void inti()
{
f[]=;
for(int i=; i<=; i++)
f[i]=(f[i-]*i)%mod;
q['A']=;
for(int i=; i<=; i++)
q[''+i]=i;
q['']=;
q['J']=;
q['Q']=;
q['K']=;
} ll mult_mod(ll a,ll b,ll c)
{
a%=c;
b%=c;
ll ret=;
ll tmp=a;
while(b)
{
if(b&)
{
ret+=tmp;
if(ret>c) ret-=c;
}
tmp<<=;
if(tmp>c) tmp-=c;
b>>=;
}
return ret;
} ll pow_mod(ll a,ll n)
{
ll ret=;
ll temp=a%mod;
while(n)
{
if(n&)
{
ret=(ret*temp)%mod;
}
temp=(temp*temp)%mod;
n>>=;
}
return ret;
}
int main()
{
inti();
while(scanf("%s",str)!=EOF)
{
int k=strlen(str);
for(int i=; i<=; i++)
{
num[i]=;
}
int cnt=;
for(int i=; i<k; i++)
{
num[q[str[i]]]--;
cnt--;
if(str[i]=='') i++;
}
ll ans=;
int m=cnt;
bool flag=false;
for(int i=; i<k; i++)
{
if(cnt==) break;
for(int j=; j<=; j++)
{
if(num[j]>&&j<q[str[i]])
{
ll x=f[cnt-];
ll y=;
for(int c=; c<=; c++)
{
if(c==j)
{
y=(y*f[num[c]-])%mod;
continue;
}
y=(y*f[num[c]])%mod;
}
x=(x*pow_mod(y,mod-))%mod;
ans=(ans+x)%mod;
}
}
if(num[q[str[i]]]==)
{
flag=true;
break;
}
num[q[str[i]]]--;
cnt--;
if(str[i]=='') i++;
}
if(!flag&&m<-m)
ans=(ans+)%mod;
printf("%lld\n",ans);
}
return ;
}

zoj 3841 Cards的更多相关文章

  1. POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / SCU 1132 Invitation Cards / ZOJ 2008 Invitation Cards / HDU 1535 (图论,最短路径)

    POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / ...

  2. zoj 2734 Exchange Cards【dfs+剪枝】

    Exchange Cards Time Limit: 2 Seconds      Memory Limit: 65536 KB As a basketball fan, Mike is also f ...

  3. POJ 1511 Invitation Cards (ZOJ 2008) 使用优先队列的dijkstra

    传送门: http://poj.org/problem?id=1511 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1008 ...

  4. 【ZOJ】3380 Patchouli's Spell Cards

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3957 题意:m个位置,每个位置填1~n的数,求至少有L个位置的数一样的概率(1 ...

  5. zoj 3380 Patchouli's Spell Cards 概率DP

    题意:1-n个位置中,每个位置填一个数,问至少有l个数是相同的概率. 可以转化求最多有l-1个数是相同的. dp[i][j]表示前i个位置填充j个位置的方案数,并且要满足上面的条件. 则: dp[i] ...

  6. ZOJ 2852 Deck of Cards DP

    题意: 一一个21点游戏. 1. 有三个牌堆,分别为1X,2X,3X. 2. 纸牌A的值为1,纸牌2-9的值与牌面面相同,10(T).J.Q.K的值为10,而而joke(F)的值为 任意大大. 3. ...

  7. Deck of Cards ZOJ - 2852 dp 多决策 三维 滚动更新

    题意:一个特殊21点游戏 具体http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2852 题解:建一个三维dp,表示三个卡槽分别 ...

  8. ZOJ 3380 Patchouli's Spell Cards

    方案数,$dp$. 总的方案数有$n^m$种,符合要求的直接算不好算,可以算反面,即不符合要求的. 设$dp[i][j]$表示前$i$种等级填了$j$个位置,那么$dp[i][j]=sum(dp[i- ...

  9. 重拾ZOJ 一周解题

    ZOJ 2734 Exchange Cards 题目大意: 给定一个值N,以及一堆卡片,每种卡片有一个值value和数量number.求使用任意张卡片组成N的方式. 例如N = 10 ,cards(1 ...

随机推荐

  1. MAC上更新Ruby失败解决办法

    尝试用RVM升级Ruby http://blog.csdn.net/lissdy/article/details/9191351 如果碰到下面问题 Searching for binary rubie ...

  2. Android开发之Activity(活动)

    在安卓中,Activity(活动)就是一个包含应用程序的用户界面的窗口.一个应用程序可以包含一个或多个Activity. 一般一个活动对应一个UI文件,即xml文件.创建活动一般是基础Activity ...

  3. Tomcat Server 原理

    构成: 1.server代表整个catalina serverlet容器 2.service:由一个或多个connector以及一个共享的engine处理引擎组成 3.connector 在指定端口上 ...

  4. python下操作ftp上传

    生产情况:tomcat下业务log备份,目录分多级,然后对应目录格式放到ftp上:所以,结构上 我就是一级一级目录进行判断(因为我没有找到在ftp一次判断其子目录是否存在),还有一个low点就是我没有 ...

  5. Gym 100187A-Potion of Immortality

    题意:有n个药瓶,里面有一个有毒,然后每次拿兔子去试吃k瓶并且只能是k瓶,如果兔子死了就知道那瓶是毒药了,现在问你最少兔子要试吃几次. 分析:这题卡了好久,其实很简单.先考虑肯定要吃n/k次,那么剩下 ...

  6. vue写请求接口--请求参数的变量要在return里面声明

    //谨记return里面是返回所有声明的变量的名字,数组以及对象等等 export default { data () { return { //所有的变量都是写在data 的return里面的,主要 ...

  7. in 与 = 的区别

    in 与 = 的区别   结果是相同的.

  8. MyBatis的学习总结四:实现关联表查询【参考】

    一.一对一的表关联查询(edi_test_task  和  edi_task_detail) 例子:一条任务明细对一条任务记录 对应的sql的映射xml文件如下: <?xml version=& ...

  9. 推送消息实现icon角标的动态显示

    在你自己服务器上做计数,客户端做减法并反馈给你的服务器 ,然后你服务器将需要显示的数字发送给苹果推送服务器(就是消息中的badge)比如:1,你服务器上发送出去3个推送消息到A手机           ...

  10. UIScrollView -2(UIScrollView 与 UIPageControl的使用): 分页查看图片

    1.初始化UIScrollView 2.设置初始化出来的UIScrollView的contentSize: myscrollview.contentSize =CGSizeMake(CGRectGet ...