把出现过的每个字母映射到对应的数字,这样字符串就变成相应的nc进制数,然后把它转换成10进制,并放入hash[]中,如果是第一次放入,则总数加一。
例如:(此分析出自。感谢他。)
3 4
daababacd = 3
a = 0
b = 1
c = 2
daa=300(4进制)
转换为十进制: daa = 3 * 4 ^ 2 + 0 * 4 ^ 1 + 0 * 4 ^ 0 = 48
然后if(!hash[48]) hash[48]++;
#include#include #include #include using namespace std; #define MAX 16000005 char s[MAX]; int ascii[256]; int hash[MAX]; int main() { freopen("acm.txt","r",stdin); int n,nc; int i,j; int len,cnt,sum; while(scanf("%d%d",&n,&nc)!=EOF) { cnt=0; memset(ascii,0,sizeof(ascii)); memset(hash,0,sizeof(hash)); scanf("%s",s); len=strlen(s); for(i=j=0; i