设有 nn 个正整数 a_1 \dots a_na 1 …a n ,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
时间: 2023-04-28 21:05:18 浏览: 235
将这些正整数按照一定的规则排序,然后将它们依次连接起来,就可以组成一个最大的整数。具体来说,对于两个正整数 a 和 b,如果将它们连接起来得到的数 ab 大于 ba,那么就将 a 排在 b 的前面,否则将 b 排在 a 的前面。按照这个规则对所有的正整数进行排序,然后将它们依次连接起来,就可以得到一个最大的整数。
相关问题
C语言给出 nn 和 nn 个整数 a_ia i ,求这 nn 个整数中最小值是什么。 输入格式 第一行输入一个正整数 nn,表示数字个数。 第二行输入 nn 个非负整数,表示 a_1,a_2 \dots a_na 1 ,a 2 …a n ,以空格隔开。 输出格式 输出一个非负整数,表示这 nn 个非负整数中的最小值。
根据你提供的输入格式和输出格式,我稍作修改来适应这个问题。
#include <stdio.h>
int main() {
int n;
printf("请输入数字的个数 n:");
scanf("%d", &n);
int min_val;
printf("请输入 %d 个非负整数:\n", n);
scanf("%d", &min_val);
for (int i = 1; i < n; i++) {
int num;
scanf("%d", &num);
if (num < min_val) {
min_val = num;
}
}
printf("%d\n", min_val);
return 0;
}
这个代码与之前给出的代码相似,不同之处在于输出的格式。现在直接输出最小值而不是附带文字描述。
请按照指定的格式输入数字个数和非负整数,代码将输出最小值。
如果还有其他问题,请随时提问。
给出一个长度为 n(1\leq n\leq 2\cdot 10^5)n(1≤n≤2⋅10 5 ) 的序列 aa (1\leq a_i\leq 10^9)(1≤a i ≤10 9 ),并且保证序列 aa 所有元素乘积 \leq 10^{18}≤10 18 ,求这个序列中满足如下条件的连续子段 [a_l\dots a_r][a l …a r ] 的数量: 令 x=a_l\cdot a_{l+1}\cdot a_{l+2}\dots a_rx=a l ⋅a l+1 ⋅a l+2 …a r ,那么 xx 的末尾恰好有 k(0\leq k\leq 10^9)k(0≤k≤10 9 ) 个零。 输入描述: 第一行包含一个整数 T(1\leq T\leq 10^5)T(1≤T≤10 5 ),表示测试用例的组数。 对于每组测试用例: 第一行包含两个整数 n(1\leq n\leq 2\cdot 10^5)n(1≤n≤2⋅10 5 ) 和 k(0\leq k\leq 10^9)k(0≤k≤10 9 ),表示序列的长度和题目中提到的后导零的数量; 第二行包含 nn 个整数 a_1\dots a_n\ (1\leq a_i\leq 10^9)a 1 …a n (1≤a i ≤10 9 ),表示该序列。 保证对于所有的测试用例,nn 的总和不超过 2\cdot 10^52⋅10 5 。 输出描述: 对于每组测试用例: 仅输出一行,包含一个整数,表示答案。 示例1 输入 复制 2 5 3 125 1 8 1 1 1 0 6 输出 复制 3 1用C++实现此题
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5;
int n, k, a[N], cnt2[N], cnt5[N], t, T;
ll ans;
vector<int> v;
map<int, ll> mp;
int main()
{
cin >> T;
while (T--)
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
cnt2[i] = cnt2[i - 1] + __builtin_popcount(a[i]) - __builtin_popcount(a[i] & -a[i]);
cnt5[i] = cnt5[i - 1] + __builtin_popcount(a[i]) - __builtin_popcount((a[i] % 5 == 0 ? a[i] / 5 : a[i]) & -((a[i] % 5 == 0 ? a[i] / 5 : a[i])));
}
v.clear();
mp.clear();
mp[0] = 1;
for (int i = 1; i <= n; i++)
{
if (cnt2[i] >= k || cnt5[i] >= k)
{
ans += mp[cnt2[i] - k] + mp[cnt5[i] - k];
}
if (cnt2[i] <= cnt5[i])
{
if (mp.count(cnt2[i]))
mp[cnt2[i]]++;
else
mp[cnt2[i]] = 1;
}
else
{
if (mp.count(cnt5[i]))
mp[cnt5[i]]++;
else
mp[cnt5[i]] = 1;
}
}
cout << ans << endl;
ans = 0;
}
return 0;
}
相关推荐

















