1072: [SCOI2007]排列perm

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 805  Solved: 497
[Submit][Status]

Description

给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0)。例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种。

Input

输入第一行是一个整数T,表示测试数据的个数,以下每行一组s和d,中间用空格隔开。s保证只包含数字0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Output

每个数据仅一行,表示能被d整除的排列的个数。

Sample Input

7
000 1
001 1
1234567890 1
123434 2
1234 7
12345 17
12345678 29

Sample Output

1
3
3628800
90
3
6
1398

HINT

在前三个例子中,排列分别有1, 3, 3628800种,它们都是1的倍数。 【限制】 20%的数据满足:s的长度不超过5, 1<=T<=5 50%的数据满足:s的长度不超过8 100%的数据满足:s的长度不超过10, 1<=d<=1000, 1<=T<=15,

Source

题解:

又一道恶心的状压DP,我对状压还不熟悉。。。

代码:

 var f:array[..,..,..] of longint;
i,j,nn,k,m,t,l,ans,d,n:longint;
s,st:ansistring;
a,calc,c:array[..] of longint;
b:array[..,..] of longint;
procedure init;
begin
readln(s);
st:=copy(s,,pos(' ',s)-);
n:=length(st);
for i:= to n do a[i]:=ord(st[i])-ord('');
delete(s,,pos(' ',s));
val(s,d);//writeln(st,' ',d);
fillchar(b,sizeof(b),);
for i:= to <<n- do
begin
j:=i;calc[i]:=;
while j<> do
begin
inc(calc[i]);dec(j,j and (-j));
end;
j:=calc[i];
inc(b[j,]);b[j,b[j,]]:=i;
end;
end;
procedure main;
begin
fillchar(f,sizeof(f),);
for i:= to n do f[,<<(i-),a[i] mod d]:=;
for i:= to n do
for l:= to b[i,] do
begin
j:=b[i,l];
for k:= to n do
if j and (<<(k-))<> then
for m:= to d- do
inc(f[i,j,(*m+a[k]) mod d],f[i-,j-<<(k-),m]);
end;
ans:=f[n,<<n-,];
fillchar(c,sizeof(c),);
for i:= to n do inc(c[a[i]]);
for i:= to do
if c[i]<= then continue
else for j:= to c[i] do ans:=ans div j;
writeln(ans);
end; begin
assign(input,'input.txt');assign(output,'output.txt');
reset(input);rewrite(output);
readln(t);
while t> do
begin
dec(t);
init;
main;
end;
close(input);close(output);
end.

SCOI2007排列perm的更多相关文章

  1. BZOJ 1072: [SCOI2007]排列perm 状态压缩DP

    1072: [SCOI2007]排列perm Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为 ...

  2. BZOJ 1072 [SCOI2007]排列perm

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1268  Solved: 782[Submit][Sta ...

  3. [BZOJ1072][SCOI2007]排列perm 状压dp

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2488  Solved: 1546[Submit][St ...

  4. 1072: [SCOI2007]排列perm - BZOJ

    Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种.Input ...

  5. [BZOJ 1072] [SCOI2007] 排列perm 【状压DP】

    题目链接:BZOJ 1072 这道题使用 C++ STL 的 next_permutation() 函数直接暴力就可以AC .(使用 Set 判断是否重复) 代码如下: #include <io ...

  6. BZOJ 1072: [SCOI2007]排列perm [DP 状压 排列组合]

    题意:给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0) 100%的数据满足:s的长度不超过10, 1<=d<=1000, 1<=T<=15 看到整 ...

  7. 【BZOJ】1072: [SCOI2007]排列perm(状压dp+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1072 首先无限膜拜题解orz表示只会暴力orz 数据那么小我竟然想不到状压! orz 这种题可以取模 ...

  8. 【以前的空间】bzoj 1072 [SCOI2007]排列perm

    又颓废了一个下午,最近撸mc撸到丧失意识了,玩的有点恶心,于是找水题做,瞧不起颓废的自己啊. another水题. 这题题意很明显啦,就是找数字排列后组成的数去mod d=0后有多少种. 普通的搜索的 ...

  9. 【枚举】bzoj1072 [SCOI2007]排列perm

    暴力,next_permutation函数用于枚举出下一个排列.sscanf函数用于将字符串转化成数字. #include<cstdio> #include<cstring> ...

随机推荐

  1. javaee学习-新建servlet 直接返回html

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  2. 九度OJ 1056--最大公约数 1439--Least Common Multiple 【辗转相除法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1056 题目描述: 输入两个正整数,求其最大公约数. 输入: 测试数据有多组,每组输入两个正整数. 输出: 对于每组 ...

  3. resid入门笔记(二)

    本节介绍redis 消息订阅   密码  持久化  主从配置   首先我对消息订阅理解的不深,应该说仅知道概念吧 发送消息  cctv1 发送 hello   cctv2 发送 ‘你好’ client ...

  4. H5发展简介

    HTML4.01 超文本标记语言,1999年12月24日由W3C组织发布. XHTML 扩展的超文本标记语言(eXtensible Hyper Text Markup Language),和HTML4 ...

  5. 之前可运行mongodb,后来却不行了显示Unclean shutdown detected mongodb

    解决办法有三个: 第一个:如果你之前可以运行,说明你已经有数据存放目录了,你可以把数据存放目录之前的数据清空再启动,在配置一下 第二个:使用mongod --repair --dbpath D:\Mo ...

  6. jsoup 对网页中图片解析

    Elements article = new Elements(); Elements Img = new Elements(); article = doc.select("div#con ...

  7. 51nod动态规划-----矩阵取数

    一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值. 例如:3 * 3的方格. 1 3 3 2 1 3 2 2 1 能够获得的最 ...

  8. Ubuntu下安装php调试工具xdebug

    安装xdebug: sudo apt-get install php-pear sudo apt-get install php5-dev pecl install xdebug 创建配置文件: /x ...

  9. PHP初学留神(五)·小结

    来学习快两个月了,这周末即将回家开始写论文.那么走之前,好好总结一下这两个月的所学所得吧.这段时间,在实验室里做的Web开发主要涉及到了web开发的一些框架内容以及php基础知识.思维导图记录如下. ...

  10. Substring的简单使用

    string myString = "测试一下函数Substring()是怎么用的"; //Substring()在C#中有两个重载函数 //分别如下示例 //如果参数为一个长整数 ...