题目链接

给出一个<1e18的数, 求将他的各个位的数字交换后, 能整除m的数的个数。

用状态压缩记录哪个位置的数字已经被使用了, 具体看代码。

 #include<bits/stdc++.h>
using namespace std;
#define pb(x) push_back(x)
#define ll long long
#define mk(x, y) make_pair(x, y)
#define lson l, m, rt<<1
#define mem(a) memset(a, 0, sizeof(a))
#define rson m+1, r, rt<<1|1
#define mem1(a) memset(a, -1, sizeof(a))
#define mem2(a) memset(a, 0x3f, sizeof(a))
#define rep(i, a, n) for(int i = a; i<n; i++)
#define ull unsigned long long
typedef pair<int, int> pll;
const double PI = acos(-1.0);
const double eps = 1e-;
const int mod = 1e9+;
const int inf = ;
const int dir[][] = { {-, }, {, }, {, -}, {, } };
int digit[], m, cnt;
ll dp[<<][];
ll dfs(int s, int num) { //s是当前状态, num是模m剩余的数
if(num==&&s==)
return ;
if(~dp[s][num])
return dp[s][num];
int used[];
mem(used);
ll ret = ;
for(int i = ; i<cnt; i++) {
if(!(s&(<<i))) //如果这一位已经被使用了就直接continue
continue;
if(used[digit[i]])
continue;
used[digit[i]] = ;
ret += dfs(s^(<<i), (num*+digit[i])%m);
}
return dp[s][num] = ret;
}
int main()
{
int num[];
mem(num);
mem1(dp);
ll n;
cin>>n>>m;
while(n) {
digit[cnt++] = n%;
n/=;
}
ll ans = ;
ll s = (<<cnt)-; //初始全都没有被使用
for(int i = ; i<cnt; i++) {
if(digit[i]) {
if(num[digit[i]]) //某一位上的数不能够重复计数
continue;
num[digit[i]] = ;
ans += dfs(s^(<<i), digit[i]%m); //s^(1<<i)说明第i位被使用了
}
}
cout<<ans<<endl;
return ;
}

codeforces 401D. Roman and Numbers 数位dp的更多相关文章

  1. CodeForces 628 D Magic Numbers 数位DP

    Magic Numbers 题意: 题意比较难读:首先对于一个串来说, 如果他是d-串, 那么他的第偶数个字符都是是d,第奇数个字符都不是d. 然后求[L, R]里面的多少个数是d-串,且是m的倍数. ...

  2. Codeforces 401D Roman and Numbers

    题目大意 Description 给定一个数 N(N<1018) , 求有多少个经过 N 重组的数是 M(M≤100) 的倍数. 注意: ①重组不能有前导零; ②重组的数相同, 则只能算一个数. ...

  3. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)

    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...

  4. codeforces 55D - Beautiful numbers(数位DP+离散化)

    D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  5. Codeforces Beta Round #51 D. Beautiful numbers 数位dp

    D. Beautiful numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55/p ...

  6. Educational Codeforces Round 8 D. Magic Numbers 数位DP

    D. Magic Numbers 题目连接: http://www.codeforces.com/contest/628/problem/D Description Consider the deci ...

  7. Codeforces 914 C. Travelling Salesman and Special Numbers (数位DP)

    题目链接:Travelling Salesman and Special Numbers 题意: 给出一个二进制数n,每次操作可以将这个数变为其二进制数位上所有1的和(3->2 ; 7-> ...

  8. CodeForces - 55D - Beautiful numbers(数位DP,离散化)

    链接: https://vjudge.net/problem/CodeForces-55D 题意: Volodya is an odd boy and his taste is strange as ...

  9. Codeforces - 55D Beautiful numbers (数位dp+数论)

    题意:求[L,R](1<=L<=R<=9e18)区间中所有能被自己数位上的非零数整除的数的个数 分析:丛数据量可以分析出是用数位dp求解,区间个数可以转化为sum(R)-sum(L- ...

随机推荐

  1. Android入门——UI(8)——Fragment(2)

    先演示一下如何在一个activity中放置两个Fragment,先定义两个Fragment <?xml version="1.0" encoding="utf-8& ...

  2. FPGA开发(2)

    1. 通常SPI通信的验证流程: 2. 对于主机而言,这里的FPGA为从机,而我们最关心SPI_CS,SPI_CSK,SPI_MISI这三个信号.SPI_CS为片选使能端,片选有效时FPGA才可以接受 ...

  3. RandomAccessFile浅析

    RandomAccessFile类中的write方法有以下的注意事项: 首先write方法每次都写入一个字节 api中write方法如下 public void write(int b) throws ...

  4. 编写程序输入一个5x5的矩阵,将最大元素与中心元素交换,并按行列对齐输出。

    编写程序输入一个5x5的矩阵,将最大元素与中心元素交换,并按行列对齐输出. 题目描述 编写程序输入一个5x5的矩阵,将最大元素与中心元素交换,并按行列对齐输出. 输入描述 编写程序输入一个5x5的矩阵 ...

  5. 游戏中网络数据包和HTTP数据的思考

    快下班了,对于这个沙盒类文字游戏,其实考虑的东西还是很多的,服务器的架构,NPC, NPC API的运算,等等等 现在在思考大数据传输,比如背包数据或者拍卖行的商品展示数据在传输的时候的性能问题 目前 ...

  6. linux命令学习02-通过tomcat学习ps和netstat

    问题:如何查找tomcat进程,以及tomcat占用的端口号? 1.ps -ef|grep tomcat root 1984 1 19 10:20 ? 00:00:10 /opt/jdk1.7.0_8 ...

  7. verilog中=和<=的区别

    一般情况下使用<=,组合逻辑使用=赋值,时序逻辑使用<=赋值: 举个例子:初始化m=1,n=2,p=3:分别执行以下语句 1.begin m=n:n=p:p=m: end 2.begin ...

  8. 转 批处理 %~dp0的意义

    http://nealcai.iteye.com/blog/1685192 http://blog.csdn.net/caz28/article/details/7448677 http://stac ...

  9. 占成本85% SSD深度选购教你如何看颗粒

    颗粒是固态硬盘负责容量和传输的介质,在这一方面上与优盘产品是相同的,从外观上看,颗粒占据了整个固态硬盘内部70%左右的空间,其同样做为成本技术,根据厂商的用料不同,成为了固态硬盘内部核心材料. 颗粒的 ...

  10. E=MC2 - 搜搜百科

    E=MC2 - 搜搜百科 1 E=MC2 质能等价理论是爱因斯坦狭义相对论的最重要的推论,即著名的方程式E=mC^2,式中E为能量,m为质量,C为光速:也就是说,一切物质都潜藏着质量乘于光速平方的能量 ...