CF1267K.Key Storage

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Karl 正在开发一个密钥存储服务。每个用户都有一个正整数密钥。

Karl 知道以明文形式存储密钥是不安全的。因此,他决定不直接存储密钥,而是存储密钥的“指纹”。不过,使用现有的指纹算法对他来说太无聊了,于是他发明了自己的算法。

Karl 的指纹算法如下:将给定的整数先除以 2,然后将结果除以 3,再将结果除以 4,依此类推,直到结果为 0(每次都是整数除法)。指纹定义为这些除法过程中所有余数组成的多重集。

例如,Karl 的指纹算法应用于密钥 11 时的过程如下:11 除以 2 余 1,结果为 5;5 除以 3 余 2,结果为 1;1 除以 4 余 1,结果为 0。因此,密钥 11 产生的余数序列为 [1,2,1][1, 2, 1],其指纹多重集为 {1,1,2}\{1, 1, 2\}。

Ksenia 想证明 Karl 的指纹算法并不安全。例如,她发现密钥 178800 和 123456 都会产生指纹 {0,0,0,0,2,3,3,4}\{0, 0, 0, 0, 2, 3, 3, 4\}。因此,用户有可能与一些常用且容易猜到的密钥(如 123456)发生指纹碰撞。

Ksenia 想让她的观点更有说服力。她希望计算出,与给定常用密钥列表中每个密钥具有相同指纹的其他密钥的数量。你的任务是帮助她完成这个计算。

输入格式

第一行包含一个整数 tt(1≤t≤500001 \le t \le 50000),表示需要检查的常用密钥数量。接下来的 tt 行,每行包含一个整数 kik_i(1≤ki≤10181 \le k_i \le 10^{18}),表示一个密钥。

输出格式

对于每个密钥,输出一个整数,表示与该密钥具有相同指纹的其他密钥的数量。

输入输出样例

  • 输入#1

    3
    1
    11
    123456
    

    输出#1

    0
    1
    127
    

说明/提示

与 11 具有相同指纹的另一个密钥是 15。15 产生的余数序列为 [1,1,2][1, 1, 2]。因此,这两个数的指纹多重集都是 {1,1,2}\{1, 1, 2\}。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页