首页 > 其他分享 >Codeforces Round 980 (Div. 2) C. Concatenation of Arrays

Codeforces Round 980 (Div. 2) C. Concatenation of Arrays

时间:2024-10-21 12:45:32浏览次数:8  
标签:ma Arrays 980 Concatenation int 数组 fi se define

题目:

给定 n 个数组 a1, a2, …, an。每个数组的长度都是2。因此,ai=[ai,1, ai,2]。你需要将这些数组连接成一个长度为 2n 的单一数组,以便使结果数组中的逆序数最小。注意,你不需要实际计算逆序的数量。

更正式地说,你需要选择一个长度为 n 的排列 p,使得数组 b=[ap1,1, ap1,2, ap2,1, ap2,2,…, apn,1, apn,2] 中的逆序数尽可能少。

数组 c 中的逆序数是指索引对 i 和 j 的数量,其中 i<j 且 ci>cj。

长度为 n 的排列是由 n 个不同整数从 1 到 n 随机顺序组成的数组。例如,[2,3,1,5,4] 是一个排列,但 [1,2,2] 不是一个排列(2 在数组中出现了两次),而 [1,3,4] 也不是一个排列(n=3,但数组中有 4)。

思路:

涉及逆序对那就要考虑排序,而怎么排序是一个贪心问题。对所有数对依据每个数对中两个数的较小的那个数进行升序排列,如果较小值相等,则按照较大值升序排列。

代码:

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define MOD 1000000007
#define fi first
#define se second
#define pii pair<int, int>
#define vec vector

bool cmp(pii a, pii b){
    int ma = min(a.fi, a.se), mb = min(b.fi, b.se);
    if(ma != mb){
        return ma < mb;
    }
    ma = max(a.fi, a.se), mb = max(b.fi, b.se);
    return ma < mb;
}

void solve(){   
    int n;
    cin >> n;
    vec<pii> a(n);
    for(int i = 0; i < n; i++){
        cin >> a[i].fi >> a[i].se;
    }
    sort(a.begin(), a.end(), cmp);
    for(int i = 0; i < n; i++){
        cout << a[i].fi << ' ' << a[i].se << ' ';
    }
    cout << '\n';
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    cin >> t;
    while(t--){
        solve();
    }
    return 0;
}   

标签:ma,Arrays,980,Concatenation,int,数组,fi,se,define
From: https://blog.csdn.net/puzhaoyu/article/details/143109091

相关文章

  • Codeforces Round 980 (Div. 2)
    糖丸了,什么沟史比赛A.ProfitableInterestRate初始有\(a\)个硬币,可以花费硬币开通盈利账户与非盈利账户开通盈利账户需要至少花费\(b\)个金币开通非盈利账户没有限制每在非盈利账户花费\(x\)元,盈利账户的限制\(b\)就减少\(2x\)元求最大的在盈利账户上的花......
  • 六,Arrays
    Arrays类详解Arrays类是Java标准库中提供的一个工具类,专门用于对数组进行各种操作。这个类提供了一系列静态方法,用于排序、搜索、比较数组以及将数组转换为字符串等。这些方法适用于所有对象数组和原始类型数组。Arrays类的特点工具类:Arrays类是一个工具类,只包含静态方......
  • 常用类:包装类,System类,Random类,Arrays
    包装类--integer相关包装inti1=Integer.parseInt("100");//String->intSystem.out.println(i1);Integeri2=Integer.valueOf("100");//String->IntegerSystem.out.println(i2);Integeri3=In......
  • Java数组工具类Arrays
    Arrays工具类将数组内容转为字符串对数组内容进行排序判断是否相同数组的复制查找特定值的索引用指定元素存满数组数组转列表Arrays工具类提供了一系列方便、高效的方法来操作和处理数组,大大简化了Java中对数组的常见操作。将数组内容转为字符串使用Arrays......
  • java.util.Arrays#sort
    基本数据类型数组/***java.util.Arrays#sort(int[])*publicstaticvoidsort(int[]a){*DualPivotQuicksort.sort(a,0,a.length-1,null,0,0);//DualPivotQuicksort*}*/Obje......
  • 达尔优A980,一款诚意满满的鼠标
    首先说说这个鼠标的参数,3395芯片和150赫兹的处理器,性能方面足够用。这鼠标最大的亮点就是左侧有一块小屏幕,看网上的评论都说鼠标不要这个屏幕的好,谁会一直盯着屏幕看?但是对于我而言,这个屏幕最大的作用就是可以脱离电脑驱动,直接在鼠标设置回报率dpi,灯光颜色以及效果都可以通过鼠标......
  • 川土微在直流充电桩上的应用,CA-IS3641HVW隔离芯片、CA-IS3417WT隔离开关、CA-IS3980P
    川土微隔离器芯片涵盖:标准数字隔离器、电表专用数字隔离器、集成隔离电源的标准数字隔离器、隔离I2C、隔离CAN、带隔离电源的隔离CAN、隔离RS-485/422、带隔离电源的隔离RS-485/422、低成本隔离RS-485/422、0.5W全集成隔离电源、全差分隔离运放、隔离误差运放等。充电桩控制器整......
  • Arrays常用API
    Arrays常用API本文主要总结了JAVA的Arrays工具类的常见使用方法,该工具类在机试刷题、面试过程中经常被问到,阅读完建议自己实践实践。1.常见API:1Arrays.toString()//输出数组的内容(基本数据类型)2Arrays.sort(arr);//排序,默认是升序3Arrays.binarySearch(int[]......
  • 中国土地利用覆盖和变化数据集(1980-2021)
       该数据集通过融合森林资源清查数据和20种遥感土地利用产品,重建生成了1980-2015年中国森林覆盖数据集,空间分辨率为1×1公里。并且在此基础上进一步获得高精度森林覆被信息和土地利用覆盖数据集相融合,生成了中国1980-2021年土地利用覆盖和变化数据集,空间分辨率为10×10公......
  • Arrays类的使用
    1.Arrays在IDEA中有一个叫Arrays的类,它可以执行数组的一系列操作2.Arrays.toString该代码用于执行数组的打印,因为数组的打印用sout并不能输出出来(数组面向于对象),所以得用该代码输出3.Arrays.sort将数组的数字从小到大排序4.Arrays.fill将数组中的数字用其他数字覆盖掉......