HDU 4669 Mutiples on a circle 不知道该归为哪一类。
题意:给你N个珠宝和一个K,每个珠宝上面都有数字,这个珠宝做成项链,把珠宝上的数字拼起来如果可以整除掉K,那么久说这个数字为wonderful value,问你有多少种方案可以组成WONDERFUL VALUE。
对每个数取余并记录多少位,这样的话拼数的时候好操作。详细解法贴个结题报告吧。

代码:
#include <iostream>
#include <stdio.h>
using namespace std;
int dp[][];
int a[];
int len[];
int decmod[<<];
int digit(int a)
{
int len = ; while(a)
{
a /= ;
len++;
} return len;
}
void getdecmod(int k,int n)
{
decmod[] = ;
int i;
for(i = ;i <= n<<;i++)
{
decmod[i] = (decmod[i-]*)%k;
}
}
int main()
{
int n,k; while(~scanf("%d %d",&n,&k))
{
int j,i;
for(i = ;i <= n;i++)
scanf("%d",&a[i]),a[i+n] = a[i];
getdecmod(k,n);
for(i = ;i <= n;i++)
{
for(j = ;j < k;j++)
dp[i][j] = ;
}
int r ;
for(i = ;i <= n;i++)
{
len[i+n] = len[i] = digit(a[i]);
r = a[i] = a[i+n] = a[i]%k;
dp[i][r]++;
} r = a[];
int sublen = ;
for(i = n;i > ;i--)
{
sublen += len[i+];
r = (a[i]*decmod[sublen]+r)%k;
dp[][r]++; }
sublen = ;
for(i = ;i<= n;i++)
sublen += len[i];
int last;
last = r;
// printf("%d--------------\n",last);
__int64 ans = dp[][];
for(i = ;i <= n;i++)
{
for(j =;j < k;j++)
{
r = (j*decmod[len[i]]+a[i])%k;
dp[i][r] += dp[i-][j];
}
last = (last*decmod[len[i]]+a[i])%k;
dp[i][last]--;
last = (last-(a[i]*decmod[sublen])%k+k)%k;
ans += dp[i][];
} printf("%I64d\n",ans);
}
}
HDU 4669 Mutiples on a circle 不知道该归为哪一类。的更多相关文章
- HDU 4669 Mutiples on a circle (2013多校7 1004题)
Mutiples on a circle Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Oth ...
- HDU 4669 Mutiples on a circle 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4669 考察对取模的的理解深不深刻啊,当然还有状态的设计····设d[i][j]表示以第i个数结尾,余 ...
- HDU 4669 Mutiples on a circle (DP , 统计)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意:给出一个环,每个点是一个数字,取一个子串,使 ...
- HDU 4669 Mutiples on a circle(环状DP)
题目链接 这是最早看懂题意的一题,状态转移,挺好想..但是比赛时候,就是没有想到怎么去重,而且当时有些情况,也没注意到. 先预处理的dp[0]的情况,就是以p[0]为结尾的情况.之后D就行了,例如样例 ...
- HDU 4669 Mutiples on a circle 动态规划
参考了官方题解给的方法: 对于处理循环,官方给了一种很巧妙的方法: #include <cstdio> #include <cstring> #include <cstd ...
- HDU 4665 Mutiples on a circle (圆环DP)
题意 N个数的圆环上有多少种方案可以使得选出来的一段数是K的倍数(N<=50000, K<=200, a[i]<=1000). 思路 多校第七场1004.圆上的DP--大脑太简单处理 ...
- HDU-4669 Mutiples on a circle 环形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4669 题意:给一串数字连乘一个环,求连续的子串中组成的新的数字能被K整除的个数. 首先容易想到用DP来 ...
- hdu 4669 模拟
思路: 主要就是模拟这些操作,用链表果断超时.改用堆栈模拟就过了 #include<map> #include<set> #include<stack> #incl ...
- hdu 4669 动态规划
思路:主要就是一个动态方程dp[now][(j*Exp[len[num[i]]]+num[i])%k]+=dp[pre][j];我用的是滚动数组.其实也就是dp[i][(j*Exp[len[num[i ...
随机推荐
- Postman中使用Postman Interceptor 发送带Cookie 的请求
使用Postman 发送Cookie 的请求时,发现无法发送成功, 显示"Restricted Header (use Postman Interceptor)" 提示. 网上搜了 ...
- inline-block布局错位问题
如图, 两个display为 inline-block的元素,会出现情况 针对第三种情况: 需要添加 vertical-align: top; 参考代码 <!DOCTYPE html> & ...
- git安装教程(windows安装)
git下载地址 https://git-scm.com/download/win 选择安装的组件,推荐全选 Additional icons 附加图标 On the Desktop 在桌面上 Wi ...
- filebeat+logstash通过zabbix微信报警
一.安装软件: 1.在要收集日志的机器上安装filebeat: 1).下载安装: cd /usr/local/src wget https://artifacts.elastic.co/downloa ...
- 运输层协议--TCP及UDP协议
TCP及UDP协议 按照网络的五层分级结构来看,TCP及UDP位于运输层,故TCP及UDP是运输层协议.TCP协议--传输控制协议UDP协议--用户数据报协议 多路复用及多路分解 图多路复用及多路分解 ...
- Miller_Rabbin大素数测试
伪素数: 如果存在和n互素的正整数a满足a^(n-1)≡1(mod n),则n是基于a的伪素数. 是伪素数但不是素数的个数是非常非常少的,所以如果一个数是伪素数,那么他几乎是素数. Miller_Ra ...
- HDU 3081 Marriage Match II (二分+并查集+最大流)
题意:N个boy和N个girl,每个女孩可以和与自己交友集合中的男生配对子;如果两个女孩是朋友,则她们可以和对方交友集合中的男生配对子;如果女生a和女生b是朋友,b和c是朋友,则a和c也是朋友.每一轮 ...
- 使用tar解压文件报归档中找不到
1.今天使用tar命令解压jdk安装包时,报如下错误.tar -zxvf jdk-8u181-linux-x64.tar.gz /usr/local/java/ 2.后来查了一下,因为我解压当前的文件 ...
- httpd结合php的fpm模式
httpd2.4版本的编译安装,不再赘述,查看上一篇:http://www.cnblogs.com/jsonhc/p/7134053.html 从官网下载php源码包:php-5.6.30.tar.b ...
- awk二十问-【AWK学习之旅】
---===AWK学习之旅===--- 一行命令: 1.打印输入每行的字段总数: 最后一行的字段总数:END{print NF} 每行都显示字段总数: {print NF} 2.打印指定行: aw ...