Painful Bases LightOJ - 1021

题意:给出0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F中的一些字符(不重复)还有一个进制base,求这些字符的排列形成的base进制数中,有多少个能被k整除。

方法:

正常的做法:

http://blog.csdn.net/chenzhenyu123456/article/details/51155038

自己的做法(常数很大,仅做记录):

ans[i][S][j]表示i进制下,S集合中数字可用,总产生余数为j时方案数

digit(S)表示S集合中元素数量。那么,当前数字为一个digit(S)位的base进制数,其第digit(S)位的值转换为10进制后除以k产生的余数就是j。

ans[i][S][j]=sum{ans[i][S-p][(j+k-pow(i,digit(S)-1)*p%k)%k}

其含义:把S中任意一个数字p当做首位,首位产生的余数$pow(i,digit(S)-1)*p%k$,然后剩下数字的余数应该是$(j+k-pow(i,digit(S)-1)*p%k)%k$。

实际使用时,这样定义状态会爆空间,因此只能把i的一维舍去,每组数据都重新算。

错误次数:2

原因:

1.用循环,被卡常,改成了记忆化搜索。

2.在用循环的时候,为了卡常,改了循环内外层,但不正确。

卡常记录:把记录a^b改成记录所有a^b%k,时间缩短到1/3。

 #include<cstdio>
#include<cstring>
typedef long long LL;
LL ans[][];
LL T,TT;
bool ok[];
char ss[];
LL popcount[];
LL powww[][][];
LL base,k;
LL poww(LL a,LL b)
{
if(powww[a][b][k]) return powww[a][b][k];
LL base=a,ans=,b1=b;
while(b)
{
if(b&) ans=ans*base%k;
b>>=;
base=base*base%k;
}
return powww[a][b1][k]=ans;
}
LL get(LL s,LL j)
{
if(ans[s][j]!=-) return ans[s][j];
int j1;
ans[s][j]=;
for(j1=;j1<base;j1++)
if(s&(<<j1))
ans[s][j]+=get(s^(<<j1),(j+k-poww(base,__builtin_popcount(s)-)*j1%k)%k);
return ans[s][j];
}
int main()
{
LL i,tt;
for(i=;i<(<<);i++)
popcount[i]=__builtin_popcountll(i);
scanf("%lld",&T);
for(TT=;TT<=T;TT++)
{
tt=;
memset(ok,,sizeof(ok));
memset(ans,-,sizeof(ans));
scanf("%lld%lld",&base,&k);
ans[][]=;
scanf("%s",ss);
for(i=;i<strlen(ss);i++)
if(ss[i]>=''&&ss[i]<='')
ok[ss[i]-'']=;
else
ok[ss[i]-'A'+]=;
for(i=;i<base;i++)
if(ok[i])
tt^=(<<i);
printf("Case %lld: %lld\n",TT,get(tt,));
}
return ;
}

最新文章

  1. 2016 Google code jam 答案
  2. .NET Core 1.0-最简单的Hello world控制台程序
  3. BZOJ 4144: [AMPPZ2014]Petrol
  4. 如何使用DDMS
  5. vmware虚拟机工具vmware tools介绍及安装排错
  6. Objective-C:Foundation框架-常用类-NSValue
  7. 2013 ACM/ICPC 长沙现场赛 C题 - Collision (ZOJ 3728)
  8. IOS文件沙盒
  9. 假设synthesize省略,语义属性声明assign retain copy时间,为了实现自己的setter和getter方法
  10. document.body 和 document.documentElement 的区别
  11. anular2 表单包含多个组件并验证提交
  12. WPF DataGridHyperlinkColumn
  13. Nodejs实现用户注册
  14. thinkphp5+vue+iview商城 公众号+小程序更新版本
  15. Python学习笔记【第四篇】:基本数据类型
  16. Codeforces 801B - Valued Keys
  17. 【转】电脑运行命令CMD集锦
  18. B1022. D进制的A+B
  19. bootstrap table数据分页查询展示
  20. 002 python语法入门

热门文章

  1. 获取Bootstrap-Table的所有内容,修改行内容
  2. HttpClient 认证
  3. debian配置集锦
  4. Java对对象的引用 不是 引用调用 而是按值引用 Java不存在引用调用
  5. VC FTP服务器程序分析(四)
  6. (linux)main.c中的初始化
  7. 通过xmanager连接Linux图形界面
  8. 【Java】DateUtil(2)
  9. WCF寄宿到Windows Service[1]
  10. bzoj-1012 1012: [JSOI2008]最大数maxnumber(线段树)