首页 > 其他分享 >div3E. Beautiful Array

div3E. Beautiful Array

时间:2024-07-10 11:55:05浏览次数:8  
标签:Beautiful nums div3E ll len Array dp

目录

E. Beautiful Array

原题链接

题目

思路

代码

// https://codeforces.com/contest/1986/problem/E
#include <bits/stdc++.h>
#define caseT \
    int T;    \
    cin >> T; \
    while (T--)
using namespace std;
using ll = long long;
void solve() {
    ll n, k, ans = 0, num2 = 0;
    cin >> n >> k;
    vector<ll> nums(n);
    for (int i = 0; i < n; i++) cin >> nums[i];
    sort(nums.begin(), nums.end());
    map<ll, vector<ll>> H;
    for (ll num : nums) H[num % k].push_back(num);
    for (auto &[key, p] : H) {
        if (p.size() & 1 && ++num2 >= 2) {
            cout << "-1" << endl;
            return;
        }
        int len = p.size();
        vector<vector<ll>> dp(len, vector<ll>(2));
        dp[0][0] = INT_MAX;
        if (len > 1) dp[1] = {(p[1] - p[0]) / k, INT_MAX};
        for (int i = 2; i < len; i++) {
            ll t = (p[i] - p[i - 1]) / k;
            if (i & 1) {
                dp[i][0] = min(dp[i - 2][0], dp[i - 1][1]) + t;
            } else {
                dp[i][1] = dp[i - 1][0];
                dp[i][0] = min(dp[i - 2][0], dp[i - 2][1]) + t;
            }
        }
        ans += (len & 1) ? min(dp[len - 1][1], dp[len - 1][0]) : dp[len - 1][0];
    }
    cout << ans << endl;
}
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    caseT solve();
    return 0;
}

标签:Beautiful,nums,div3E,ll,len,Array,dp
From: https://www.cnblogs.com/yuzhongrun/p/18293743

相关文章

  • day1-array-part01-7.3
    taskfortoday:1.数组理论基础,2.704.二分查找,3.27.移除元素-------------------------------1.数组理论基础-数组是存放在连续内存空间上的相同类型数据的集合。-数组内存不能删除只能覆盖-注意与容器的区别2.704二分查找二分法的两个条件:(1)有序数组;(2)无......
  • day2-array-part02-7.4
    taskfortoday1.977.有序数组的平方 2,209.长度最小的子数组 3.59.螺旋矩阵II---------------------------------------------1.977.有序数组的平方 -暴力法raiseeachelementinthearraytothepowerof2,andthensorttheminascendingorder.it......
  • OC-NSArray的基本介绍
    NSArray是不可变的;存储不同类型的对象。这意味着一个NSArray可以同时包含NSString、NSNumber、NSDictionary等不同类型的对象。同时只能存储对象,不能直接存储基本数据类型(如int、float等)。如果需要存储基本数据类型,应该先将它们封装为相应的对象类型(如NSNumber或NSValue)。......
  • codeforces1849 D. Array Painting
    题目链接https://codeforces.com/problemset/problem/1849/D题意输入\(n(1\leqn\leq2e5)\)和长为\(n\)的数组\(a(0\leqa[i]\leq2)\)。最初,数组的每个元素都是蓝色的。有两种类型的操作:支付一枚硬币,选择一个蓝色元素,将其涂成红色。选择一个不等于\(0\)的红......
  • [LeetCode] 238. Product of Array Except Self
    坑真的很多,首先要处理全零reduce没有值typeerror的问题。classSolution:defproductExceptSelf(self,nums:List[int])->List[int]:total=reduce(mul,nums)ret=[]iftotal==0:try:total=reduce(mul,[......
  • CF292C Beautiful IP Addresses 题解(两种写法)
    题意一个IP地址是一个32位的2进制整数,分成四组8位的2进制整数(没有前导0)。比如说,0.255.1.123 是一个正确的IP地址,而0.256.1.123 和 0.255.1.01 不是正确的。定义一个合法的回文IP地址为BeautifulIPAddress(回文地址就是去掉“.”后是个回文字符串的地......
  • return isPlainObject(res) || Array.isArray(res) ? observer(res, cb) : res; 这个
    这段代码主要是在实现一个深度观察者模式的部分逻辑,用于递归地处理对象和数组,以便在数据结构变化时触发回调。这里的关键是理解条件运算符和函数调用的执行顺序。让我们逐步分析:条件表达式的左侧:isPlainObject(res):这个函数检查res是否是一个纯对象(即普通的JavaScript对象......
  • HashTable,ArrayList,queue等常用方法
    HashTable,ArrayList,queue等常用方法HashMap是Java中非常常用的集合类,它存储键值对,并提供了一系列方便的方法来操作这些数据。以下是一些HashMap的常用方法:1.添加和获取元素:put(key,value):将指定的键值对添加到HashMap中。如果键已存在,则更新对应的值。get(ke......
  • Arrays,Object,String,StringBuffer和常用工具类汇总
    Arrays[数组操作方法:排序,查找,替换,转换,复制]排序将数组升序排序:Arrays.sort(数组);查找数组中想查找的数字的索引:Arrays.binarysearch(数组,想查找的数字(例如3));替换将数组中的元素全部用x替换:Arrays.fill(数组,x);Arrays.fill(数组,下标y,下标z,x);//y-z下标的元素替换为x......
  • 「杂题乱刷2」CF402D Upgrading Array
    题目链接CF402DUpgradingArray(luogu)CF402DUpgradingArray解题思路首先有一个很显然的结论,就是你一旦在第\(i\)个位置上做了一次操作后,那么你之后所有在第\(j(i\lej)\)个位置做的操作都无效了,因为此时前缀的公因数为\(1\)了。因此有个很显然的结论就是操作需要......