\(\\\)

\(Description\)


给出只包括多个\(0\text~ 9\)的数字集,求有多少个本质不同的全排列,使得组成的数字能够整除\(M\)。

  • \(|S|\in [1,10]\),\(M\in [1,10^3]\)

\(\\\)

\(Solution\)


  • 一眼状压,先将所有数字看作互不相同,\(f[S][k]\)表示集合内数字选取情况为\(S\),当前组成的数对\(M\)取模的结果为\(k\)的方案数,显然边界\(f[0][0]=1\)。
  • 枚举补集里的元素扩展,每次注意余数改为\((k*10+a[j])\%M\)。
  • 注意到每一个答案最后都用到了所有的数,所以所有相同的数最后在每一个答案里都会出现全排列,也就是说答案为\(f[S_{max}][0]\)除掉每一个数的全排列后的答案。

\(\\\)

\(Code\)


#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 1050
#define R register
#define gc getchar
using namespace std; int n,m,t,tot,a[10],p[10],num[10],f[N][N]; int main(){
scanf("%d",&t);
while(t--){
char c=gc(); m=0;
for(R int i=0;i<=9;++i) p[i]=1,num[i]=0;
while(!isdigit(c)) c=gc();
a[tot=1]=c^48; ++num[a[1]];
while(isdigit(c=gc())) ++num[a[++tot]=c^48];
for(R int i=0;i<=9;++i)
for(R int j=1;j<=num[i];++j) p[i]*=j;
while(!isdigit(c)) c=gc();
while(isdigit(c)){
m=(m<<1)+(m<<3)+(c^48); c=gc();
}
for(R int i=0;i<(1<<tot);++i)
for(R int j=0;j<m;++j) f[i][j]=0;
f[0][0]=1;
for(R int i=0;i<(1<<tot);++i)
for(R int j=0;j<m;++j) if(f[i][j]){
for(R int k=0;k<tot;++k)
if(!(i&(1<<k))) f[i|(1<<k)][(j*10+a[k+1])%m]+=f[i][j];
}
for(R int i=0;i<=9;++i) f[(1<<tot)-1][0]/=p[i];
printf("%d\n",f[(1<<tot)-1][0]);
}
return 0;
}

[ SCOI 2007 ] Perm的更多相关文章

  1. 【BZOJ 1069】【SCOI 2007】最大土地面积 凸包+旋转卡壳

    因为凸壳上对踵点的单调性所以旋转卡壳线性绕一圈就可以啦啦啦--- 先求凸包,然后旋转卡壳记录$sum1$和$sum2$,最后统计答案就可以了 #include<cmath> #includ ...

  2. 图论(网络流):SCOI 2007 修车

    同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小 ...

  3. 解题:SCOI 2007 蜥蜴

    题面 拆点跑最大流 所有能跑出去的点连向汇点,容量为inf 原点连向所有初始有蜥蜴的点,容量为1 每根柱子拆成两个点“入口”和“出口”,入口向出口连容量为高度的边,出口向别的有高度的柱子的入口连容量为 ...

  4. [SCOI 2007] 修车

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1070 [算法] 首先 , 我们发现 , 在倒数第i个修车会对答案产生i * k的贡献 ...

  5. 【SCOI 2007】 降雨量

    [题目链接] 点击打开链接 [算法] 线段树 此题细节很多,写程序时要细心! [代码] #include<bits/stdc++.h> using namespace std; #defi ...

  6. [SCOI 2007] 排列

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1072 [算法] 状压DP [代码] #include<bits/stdc++. ...

  7. poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算

    /** * 版权所有(C) 2016 * @author www.xiongge.club * @date 2016-12-7 上午10:03:29 */ package xlsx; /** * @C ...

  8. BZOJ 2007: [Noi2010]海拔

    2007: [Noi2010]海拔 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2410  Solved: 1142[Submit][Status] ...

  9. 开源WinForms界面开发框架Management Studio 选项卡文档 插件 Office 2007蓝色风格 后台线程

    Management Studio是我在WinForms小项目开发过程中搭建起来的一个插件式结构的应用程序框架,因为简单灵活又容易扩展,现在将它开源供读者参考. 跑起来的效果图如下所示,具备选项卡式多 ...

随机推荐

  1. 【Codeforces 159B】Matchmaker

    [链接] 我是链接,点我呀:) [题意] 笔和笔盖 笔有颜色和直径 笔盖也有颜色和直径 笔盖和笔如果直径相等 那么称为good 如果笔盖和笔直径相等.颜色也相等,那么称为very good 问你怎样安 ...

  2. 关于字符串不为空 错误:s!=null

    错误:s!=null 正确:StringUtils.isNotBlank(s); public static boolean isBlank(CharSequence cs) { int strLen ...

  3. 1. MaxCounters 计数器 Calculate the values of counters after applying all alternating operations: increase counter by 1; set value of all counters to current maximum.

    package com.code; import java.util.Arrays; public class Test04_4 { public static int[] solution(int ...

  4. 1.7-BGP②

    BGP的更新源(BGP Neighbor Update Source Address): 原则1: 在默认情况下, BGP路由器以自己路由表中,到达对方BGP邻居的地址的那条路由所指示的出接口(物理接 ...

  5. Python学习十四:filter()

    Python 中内置了filter()函数用于过滤序列. 使用方法: filter()接收一个函数和一个序列. filter()把传入的函数依次作用于每一个元素,然后依据返回值是True还是False ...

  6. go语言笔记——map map 默认是无序的,不管是按照 key 还是按照 value 默认都不排序

    示例 8.1 make_maps.go package main import "fmt" func main() { var mapLit map[string]int //va ...

  7. go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!

    内置函数 Go 语言拥有一些不需要进行导入操作就可以使用的内置函数.它们有时可以针对不同的类型进行操作,例如:len.cap 和 append,或必须用于系统级的操作,例如:panic.因此,它们需要 ...

  8. hdu 4123(树形dp+倍增)

    Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. [bzoj5404]party

    https://zybuluo.com/ysner/note/1240918 题面 这题面不好概括啊 解析 \(5pts\)算法 既然\(q=0\),打上文件输入输出即可. 当然不开够空间且不特判的小 ...

  10. redhat6 改 centos yum 源

    **redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装其他yum源,再配置其他源.** 本文包括配置本地源及第三方源.第三方源包括:网 ...