Knowledge Test about Match

题意:

给你一个B数组,要求你去匹配A数组[0,N-1],计算公式f(a,b)=∑i=0n−1∣ai−bi∣f(a,b)=\sum_{i=0}^{n-1}\sqrt{|a_{i}-b_{i}|}f(a,b)=∑i=0n−1​∣ai​−bi​∣​,使得结果尽量小。最终结果与标准结果相差<=4%即可。

题解:

第一反应就是直接排序sort,这样让大的和大的在一起匹配,小的和小的一起匹配,但是这样不行。因为匹配函数是sqrt,sqrt的导函数随着x的增加越来越小,直接sort后可能造成层次不齐,反而增大了函数和。
比如:
{1,2,3}
{0,1,2}
sort排序后:(1,1)(2,2)(0,3)会比sort的结果更优
std做法是直接贪心:从小到大枚举d,每次去看cal(i,a[i])+cal(j,a[j])是否比cal(i,a[j])+cal(j,a[i])优,然后乱搞就可以了
因为题目不要求求出最佳答案,只要与最佳答案在一定范围即可,所以不用求最佳答案,可以贪心

代码:

// Problem: Knowledge Test about Match
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/11166/K
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
// Data:2021-08-24 12:48:46
// By Jozky#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{#ifdef LOCALstartTime= clock();freopen("in.txt", "r", stdin);
#endif
}
void Time_test()
{#ifdef LOCALendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn= 2000;
int a[maxn];
double cal(int a, int b)
{return sqrt(abs(a - b));
}
int main()
{//rd_test();int t;read(t);while (t--) {int n;read(n);for (int i= 0; i < n; i++)read(a[i]);int cnt= 5;while (cnt--) {for (int i= 0; i < n; i++) {for (int j= i + 1; j < n; j++) {if (cal(i, a[i]) + cal(j, a[j]) > cal(i, a[j]) + cal(j, a[i])) {swap(a[i], a[j]);}}}}for (int i= 0; i < n; i++)printf("%d ", a[i]);printf("\n");}//Time_test();
}

Knowledge Test about Match相关推荐

  1. 2021牛客第一场 K.Knowledge Test about Match

    https://ac.nowcoder.com/acm/contest/11166/K 题意就是使得图中的那个式子最小,你的答案不一定是要最标准的,只要平均水平下和标准值的偏差不超过4%就行了. 有了 ...

  2. 新的一年,想发有关对话系统的paper?快关注时下最大热点:智能化与个性化...

    TL;DR: 为大家介绍和分析一个即将成为未来一年研究热点的 sub-topic: Personalized Dialog System!有强烈发 paper 的小伙伴们注意啦,上面这句话对你们来说翻 ...

  3. 2021牛客暑期多校训练营1

    2021牛客暑期多校训练营1 题号 题目 知识点 难度 A Alice and Bob 博弈论 B Ball Dropping 计算几何 签到 C Cut the Tree D Determine t ...

  4. 2021牛客暑期多校训练营1, 签到题DFBG

    2021牛客暑期多校训练营1 题号 标题 已通过代码 通过率 团队的状态 A Alice and Bob 点击查看 1365/5586 通过(博弈论-打表) B Ball Dropping 点击查看 ...

  5. 【多校训练】2021牛客多校第一场

    [前言] 组队训练的第一场比赛,感觉这场出题十分阴间,后面几个乱搞题根本不会.jpg 赛时只过了5题,rk123,学校参加5/8. A. Alice and Bob [题意] 两人博弈,每次一个人从一 ...

  6. LaTeX之使用parcolumns宏包实现双栏排版示例

    在LaTeX中实现双栏或多栏排版的方式有好几种,本文只介绍使用parcolumns宏包来实现. 一.环境 Ubuntu 22.04 XeTeX 3.141592653-2.6-0.999993 二.示 ...

  7. Hinton's Dark Knowledge

    On Thursday, October 2, 2014 Geoffrey Hinton gave a talk (slides, video) on what he calls "dark ...

  8. LANGUAGE MODELS ARE OPEN KNOWLEDGE GRAPHS —— 读后总结

    这篇paper展示了一种从预训练的语言模型(例:BERT,GPT-2/3)通过无监督训练构建知识图谱(KGs)的idea,想法还是很新奇的,搭建了LM(Language Model)和KG(Knowl ...

  9. Knowledge Distillation | 知识蒸馏经典解读

    作者 | 小小 整理 | NewBeeNLP 写在前面 知识蒸馏是一种模型压缩方法,是一种基于"教师-学生网络思想"的训练方法,由于其简单,有效,在工业界被广泛应用.这一技术的理论 ...

最新文章

  1. 2022-2028年中国木门行业投资分析及前景预测报告(全卷)
  2. 苹果「热修复门」事件复盘、分析和展望
  3. Design Pattern - Facade(C#)
  4. mxnet.gluon 加载预训练
  5. 谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事
  6. Visio studio 2019中opencv 4.1.1运行环境配置(亲测可用)
  7. java调用jni接口,Java 中通过jni接口调用native code
  8. Python编程的Turtle 库画出“精美碎花小清新风格树”,速取代码!
  9. mvn创建flink项目
  10. dsp c语言程序设计,DSP C语言程序设计.pdf
  11. IS-IS for IPv6技术原理
  12. 秋招很倒霉,但最终还是触底反弹了
  13. java编程题50道
  14. RS485端子接线方法(带图)
  15. [四年前写的诗]夜有流星兩
  16. FMS4.5限制连接数
  17. 莫那什大学柯秋红老师招收计算机视觉/机器学习方向博士研究生
  18. Web server failed to start. Port 9080 was already in use报错解决
  19. 凸优化“傻瓜”教程-----凸优化基础知识
  20. 试衣网的商业模式很脆弱

热门文章

  1. Java并发编程实战_真香!阿里P8耗时半年著作660页Java高并发与网络编程实战总结...
  2. selenium autoit java_Java+Selenium——AutoIt工具处理文件上传
  3. 怎么把c语言转换汇编程序,如何把汇编语言转换成C语言
  4. c语言 随时启停程序 按钮,单片机C语言控制单按钮启停程序(高手请进)
  5. java spark读写hdfs_Spark读取HDFS数据输出到不同的文件
  6. 计算机 ieee access,计算机 | IEEE Access 诚邀专刊稿件 (IF:3.557)
  7. 计算机一级办公软件试题,计算机一级《MS Office》练习题(含答案)
  8. learnpython3thehardway视频_LearnPython3theHardWay__Excercise 13 Parameters, Unpacking, Variables
  9. [Java基础]反射案列
  10. [蓝桥杯2015初赛]手链样式-思维+next_permutation枚举(好题)