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 ;
}

Painful Bases LightOJ - 1021的更多相关文章

  1. K - Painful Bases 状压dp

    Painful Bases LightOJ - 1021 这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数. 所以可以用状压dp,看网上题解是 ...

  2. 1021 - Painful Bases

    1021 - Painful Bases   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB As ...

  3. lightoj 1021 - Painful Bases 状态压缩

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1021 #include<cstring> #include<cstd ...

  4. lightoj 1021 - Painful Bases(数位dp+状压)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1021 题解:简单的数位dp由于总共就只有16个存储一下状态就行了.求各种进制能 ...

  5. Light OJ 1021 - Painful Bases(状态压缩DP)

    题目大意: 给你一个base 进制的数字,把这个数字的每一位进行全排列,问有多少个数字是可以整除k的. 题目解析: #include<cstdio> #include<cstring ...

  6. Light oj 1021 - Painful Bases

    题意:  给一个B进制的数,一个10进制的数K,B进制数有x位, 对着x位进行全排列的话,有x!种可能, 问这x!的可能中,有多少种可以整除K,各个位置上的数字都不同. 思路:状态压缩,数位DP #i ...

  7. LightOJ1021 Painful Bases(状压DP)

    容易想到状态dp[n][S][m](S是数字出现的集合),表示前n位用了数字集S且模k余数是m的方案数. 利用 (xy)base % k = ( x*base+y ) % k = (( x%k ) * ...

  8. lightoj 1021 (数位DP)

    题意:给你一个b进制的数,再给你一个十进制数k,你可以重新排列b进制数的每一位得到其他b进制数,问你这些数中有多少可以整除k? 思路:数位dp. #include <cstdio> #in ...

  9. Lightoj 1021【状压DP(未搞)】

    状态压缩一下,然后DP还是很容易想到,dp[i][j]表示状态为i时,模 k 为 j 的排列数的个数,然后每次对一个状态扩展,添加新的数字: 然而那个取膜没懂.....

随机推荐

  1. (转)使用MAT比较多个heap dump文件

    使用MAT比较多个heap dump文件 调试内存泄露时,有时候适时比较2个或多个heap dump文件是很有用的.这时需要生成多个单独的HPROF文件. 下面是一些关于如何在MAT里比较多个heap ...

  2. Android的onMeasure方法

    在Android开发中,当Android原生控件不能满足我们的需求的时候,就需要自定义View.View在屏幕上绘制出来先要经过measure(计算)和layout(布局). 什么时候调用onMeas ...

  3. WEBGIS控制图层的显示

    看别人搞的GIS应用,常常有勾选.取消某个图层的操作,然后地图上就有相应的图形显隐,觉得好酷. 咋实现的? 其实说起来好像也不是特别复杂.在WEB端,实现该功能的原理和步骤是: 1.WEB端加载地图服 ...

  4. android studio Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request"

    android studio运行会遇到Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Reques ...

  5. mysql 发生系统错误1067

    一般是由配置文件错误语法不正确引起的,如my.ini本人在mysql mysql-5.6.29-winx64 配置过程中遇到“发生系统错误1067”主要由于下面两个目录写的格式不正确引起的正确写法如下 ...

  6. SimpleAdapter ArrayAdapter用法

    listView = (ListView) findViewById(R.id.list_main); /* String[] strings = {"A","A&quo ...

  7. ReactMotion Demo8 分析

    链接 首先通过spring函数Motion的style参数, 传入Motion Component, 计算style的过程: const style = lastPressed === i & ...

  8. JavaScript模板引擎使用

    1. [代码]tmpl.js     // Simple JavaScript Templating// John Resig - http://ejohn.org/ - MIT Licensed(f ...

  9. Simple JavaScript Inheritance

    1. [代码]Simple JavaScript Inheritance     (function(){  var initializing = false, fnTest = /xyz/.test ...

  10. sid, pid, gid

    (一) 参考 :https://unix.stackexchange.com/questions/18166/what-are-session-leaders-in-ps 命令: ps xao pid ...