蒟蒻在写(补)完cf div3的题后来水一篇题解
题目
Codeforces Round #776 (Div. 3)的C题
大意是给一连串对应的坐标和权重,取两两对应的坐标使得他们的权重相加最小。
思路
这道题的主要知识点是贪心和排序,在思路方面不难,用map储存坐标和权重的对应关系以及坐标输入的顺序,因为每个坐标的值是唯一的,所以用他作为map的key,然后输出的时候注意前一段区间要严格包括后一段区间。
难点
个人认为本题目的难点在于如何实现让map以value的大小排序,笔者是参考了网上的博客后才实现的奇怪的知识增加了。
直接用sort是无法对value排序,所以我们新建一个类型为pair的vector,再对vector进行排序,之后都用vector来代替map计算。
实现代码如下:
#include <bits/stdc++.h>
#define inf 0x7fffffff
#define ll long long
#define mod 1000000007
using namespace std;
map<int, int> Weight; //储存坐标对应权重
map<int, int> Coordinate; //储存坐标输入的顺序
//注意这里要传入地址,否则不会改变传入值的顺序
bool cmp(pair<int, int> &a, pair<int, int