leetcode (重排数组使得)连续子数组的权值和最小

news/2024/11/29 23:53:51/
  • 题目描述:请重新排列某个仅包含2和3的数组,使得数组的所有连续子数组权值之和最小
  • 数组的权值定义为,数组中所有元素之积的因子个数,例如:rank([2,3])=4

x = p 1 c 1 × p 2 c 2 × p 3 c 3 ⋅ ⋅ ⋅ × p k c k r a n k = ( c 1 + 1 ) × ( c 2 + 1 ) × ( c 3 + 1 ) ⋅ ⋅ ⋅ × ( c 2 + 1 ) x = p_1^{c_1} \times p_2^{c_2}\times p_3^{c_3} \cdot\cdot\cdot \times p_k^{c_k}\\ rank = (c_1+1)\times (c_2+1) \times (c_3+1) \cdot\cdot\cdot \times (c_2+1) x=p1c1×p2c2×p3c3×pkckrank=(c1+1)×(c2+1)×(c3+1)×(c2+1)

  • 本题 P1=2 ,P2 =3,2和3互质,所以子数组的权值为(2的个数+1)*(3的个数+1)

2 n + 1 个数字, n + 1 个 2 , n 个 3 ,长度为 2 n 的连续子数组的权值 顺序的情况 : ( n + 1 + 1 ) ∗ ( n − 1 + 1 ) + ( n + 1 + 1 ) ∗ ( n − 1 + 1 ) = ( n + 2 ) ∗ ( n ) + ( n + 2 ) ∗ ( n ) 乱序为 : ( n + 1 ) ∗ ( n + 1 ) + ( n + 1 ) ∗ ( n + 1 ) 2n+1个数字,n+1个2,n个3,长度为2n的连续子数组的权值\\ 顺序的情况 : \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ (n+1+1)*(n-1+1)+ (n+1+1)*(n-1+1)\\ = (n+2)*(n)+ (n+2)*(n)\\ 乱序为: \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ (n+1)*(n+1)+(n+1)*(n+1) 2n+1个数字,n+12n3,长度为2n的连续子数组的权值顺序的情况:                                                                         (n+1+1)(n1+1)+(n+1+1)(n1+1)=(n+2)(n)+(n+2)(n)乱序为:                                                                         (n+1)(n+1)+(n+1)(n+1)
例如:[2,2,2,3,3]和[2,2,3,3,2]的长度为4的连续子数组

  • 所以在和的个数相同的情况下,越分散乘积就越大,越集中乘积就越小,排列应为顺序的情况

对于某个权值为 K 的数组,将 2 换成 3 的权值为 K ∗ ( N 2 − 1 ) + 1 N 2 + 1 ∗ ( N 3 + 1 ) + 1 N 3 + 1 对于某个权值为K的数组,将2换成3的权值为\\ K*\frac{(N_2-1) +1}{ N_2+1}*\frac{(N_3+1)+1}{N_3+1} 对于某个权值为K的数组,将2换成3的权值为KN2+1(N21)+1N3+1(N3+1)+1

例如:[2,2,2],K=(3+1) * (0+1)=4,
           [2,2,3]K= (2+1) * (1+1)=6 = 4* 3 4 \frac{3}{4} 43* 2 1 \frac{2}{1} 12

CG

  • 参考: 权值不超过K的连续子数组的数量
  • 本题的解答,右边界从0到n,对于每个右边界,左边界从0开始,如果窗口中的因子数量满足条件(大于或等于K),则收缩左边界直到不满足条件,这样可以得出有几个满足条件的连续子数组。
  • 注:在每次重新计算时,作者并没有将j,即左窗口放回到0,因为有边界扩大,之前的j个窗口满足条件,再窗口中加入数值只能增加权值
  • 注:作者使用了匿名函数来计算当前窗口的权值: lambda 表达式——匿名函数 auto i= [ ] () { };, 填入 & 时,代表通过引用传递捕捉父作用域的变量 https://blog.csdn.net/lievech/article/details/121393346
#include <stdio.h>
#include<unordered_map>
#include<iostream>
#include<vector>
#define ll long long
using namespace std;
int main() {int n, k;cout<<"N长度的vector有多少连续子数组的权值不小于K"<<endl;cin >> n >> k;vector<int> a(n);unordered_map<int, int> mp;ll cnt = 1, res = 0;//因子数量(cnt)auto addv = [&](int x, int t) {for (int i = 2; i * i <= x; i++) {while (x % i == 0) {cout<<i<<" "<<mp[i]<<endl;cnt /= (mp[i] + 1);cout<<"cnt"<<"<-->"<<cnt<<endl;mp[i] += t;cnt *= (mp[i] + 1);cout<<"cnt"<<"<-->"<<cnt<<endl;x /= i;}}if (x > 1) {cnt /= (mp[x] + 1);cout<<"cnt"<<"-->"<<cnt<<endl;mp[x] += t;cnt *= (mp[x] + 1);}};for (int i = 0, j = 0; i < n; i++) {cin >> a[i];addv(a[i], 1);while (j <= i && cnt >= k) {addv(a[j], -1);j++;}res += j;}cout<<"----->";cout << res << "\n";
}
N长度的vector有多少连续子数组的权值不小于K
3
4
6
2 0
cnt<-->1
cnt<-->2
cnt-->2
2 1
cnt<-->2
cnt<-->2
cnt-->1
N长度的vector有多少连续子数组的权值不小于K
3
4
9
3 0
cnt<-->1
cnt<-->2
3 1
cnt<-->1
cnt<-->3
6
2 0
cnt<-->3
cnt<-->6
cnt-->2
3 3
cnt<-->2
cnt<-->6
3 2
cnt<-->2
cnt<-->4
2 1
cnt<-->2
cnt<-->2
cnt-->1
2 
cnt-->1
----->4

http://www.ppmy.cn/news/762576.html

相关文章

S-AES的加密与解密

S-AES加密的例子 密钥为2D550010 1101 0101 0101w0w1 根据密钥扩展算法得到扩展密钥 w21011 1100 w31110 1001 w41010 0011 w50100 1010 明文为0110 1011 1010 0011 举例计算W2 现将W1进行g函数转变 ①W101010101,分成两个半字节N00101 N10101,将左右进行转换N10101 N00101,进…

TD ADC ip 测试

本次测试基于安路EG4S20BG256的一块开发板 基本参数 官方的资料显示 EAGLE系列芯片内嵌1个8通道SAR型ADC模块 8个通道和用户IO复用 采集转换一次所需时钟为16cycles clk 最大频率16MHz ADC引脚 通道引脚0N111M102L103P114M125N126P127R16 本次仅测试CH1通道&#xff08;因…

n11mysql表设计_n11(n11数据库管理工具)

把n11放在U2那一段前面,在循环程序中间X轴`Z轴必须是单调增大或减小. 数控编程N11是什么意思??? N是指段号,范围0~9999。N11就是第11段。 ——空调出故障了?以我修过7年的空调经验告诉你怎么解决这些故障,应该能让你少走不少弯路。第一:遇到空调出现故障代码时你可以去…

复制带随机指针的链表.leetcode138《数据结构入门到精通N11》

目录 题目链接 题目简介 思路 作者新建立的社区&#xff1a;非科班转码社区-CSDN社区云&#x1f496;&#x1f49b;&#x1f499; 期待hxd的支持哈&#x1f389; &#x1f389; &#x1f389; 题目链接 138. 复制带随机指针的链表 - 力扣&#xff08;LeetCode&#xff09; (…

数据库管理工具的使用

目录 摘要 一、Navicat是什么&#xff1f; 二、使用步骤 1.如何下载与安装 2.如何连接远程数据库 总结 摘要 本文主要介绍数据库管理工具的使用 一、Navicat是什么&#xff1f; 它是一款数据库管理工具&#xff0c;将此工具连接数据库,你可以从中看到各种数据库的详细…

跨应用连接同一个redis,从redis取缓存,对象属性值都为null

本地idea部署和docker部署问题&#xff0c;连接同一个redis&#xff0c;idea项目的redis缓存&#xff0c;docker中取不到&#xff0c;docker中缓存的redis本地取不到 ✅ 原因&#xff1a;idea本地代码实体类未进行代码混淆&#xff0c;docker代码实体类进行了混淆&#xff0c;…

计算机组成原理综合实验设计:基于proteus的小型CPU的设计

基于proteus的小型CPU的设计 摘要 本文详细介绍了该小型CPU的设计模板及预估实现的功能&#xff0c;然后对模块的原理进行详实的概述。之后对项目设计进行了分析&#xff0c;从原理图和电路设计图方面进行了完整的呈现。在介绍完基本的设计框架后&#xff0c;本文对项目中的每…

iOS iPadOS safari 独立Web应用屏幕旋转的时候 onresize window.innerHeight 数值不对。

iOS iPadOS safari 独立Web应用屏幕旋转的时候 onresize window.innerHeight 数值不对 一、问题描述 我有一个日记应用&#xff0c;是可以作为独立 Web 应用运行的那种&#xff0c;但在旋转屏幕的时候获取到的 window.innerHeight 和 window.innerWidth 就不对了&#xff0c;…