题意:给你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);
}
}

最新文章

  1. Mroonga 3.0.8 发布,MySQL 存储引擎
  2. DataTables 入门使用
  3. memcpy函数的使用方法
  4. [转载]mininet的安装和使用
  5. PyDev下PyQt 的尝试
  6. 【m从翻译os文章】写日志禁令Sqlnet.log和Listener.log
  7. 『HTMl5』学习日志
  8. nginx、fastCGI、php-fpm关系梳理
  9. [经典] 使用Python批量重命名iPhone拍摄的照片-按照拍摄时间重命名
  10. mysql 最左匹配 联合索引
  11. Egret EUI的学习
  12. 【xsy1300】 原题的旅行 最短路+倍增
  13. statistics_level 参数的应用
  14. 详解MySQL大表优化方案
  15. php 升级后 htmlspecialchars 返回空 的解决方案
  16. poj_1456 贪心
  17. c#文件下载---以文件流形式
  18. iOS-常用宏定义
  19. CF 1006B Polycarp&#39;s Practice【贪心】
  20. 为多个文件夹下的C源代码编写Makefile文件

热门文章

  1. codeblocks opengl的配置
  2. WEB前端研发工程师编程能力成长之路(2)
  3. [笔记] Ubuntu 18.04源码安装caffe流程
  4. JS传参中文乱码问题.NET
  5. Java设计原则—单一职责原则(转)
  6. Java设计模式之模板方法模式(Template Method)
  7. 多媒体文件格式分析 MP3文件结构及编解码流程
  8. PHP引入框架包
  9. c++ 使用WinHTTP实现文件下载功能
  10. ubuntu系统samba服务的安装配置