[进位制] aw3727. 乘方相加(进位制+模拟+aw周赛005_2)
Posted Ypuyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[进位制] aw3727. 乘方相加(进位制+模拟+aw周赛005_2)相关的知识,希望对你有一定的参考价值。
1. 题目来源
链接:3727. 乘方相加
2. 题目解析
进位制。
在第 i
次操作时,可以给任意一个元素加上
k
i
k^i
ki,这相当于将该元素在 k
进制表示下的第 i
位加上 1。
起初数组元素都是 0,每次操作都会加上
k
i
k^i
ki,那么针对 k
进制表示下,所有数字的每一个数位的和至多是 1,可以是 0,但是不能大于 1。
所以可以将输入元素变为 k
进制,统计每位数位之和,如果有一个数位大于 1,那么则无法通过该操作变成。
注意用 long long
。
时间复杂度: O ( n l o g x ) O(nlogx) O(nlogx)
空间复杂度: O ( n ) O(n) O(n)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 70;
int n, k;
int s[N];
int main() {
int T;
cin >> T;
while (T -- ) {
cin >> n >> k;
memset(s, 0, sizeof s); // 多组数据...
while (n -- ) {
LL x;
cin >> x;
for (int i = 0; x; i ++ , x /= k) s[i] += x % k; // 10 进制变 k 进制
}
bool flag = false;
for (int i = 0; i < N; i ++ )
if (s[i] > 1) {
flag = true;
break;
}
puts(flag ? "NO" : "YES");
}
return 0;
}
以上是关于[进位制] aw3727. 乘方相加(进位制+模拟+aw周赛005_2)的主要内容,如果未能解决你的问题,请参考以下文章
[E进位制] lc171. Excel表列序号(进位制+进制转换)
ACM 求全排列(字典序邻位对换递增进位制数,递减进位制数)