[USACO19OPEN]I Would Walk 500 Miles 贪心
题目 洛谷P5425(点击可跳转)
题目描述
Farmer John想要将他的编号为 \(1 \ldots N\)的 N N 头奶牛( \(N \leq 7500\) )分为非空的 \(K\) 组( $2 \leq K \leq N $ ),使得任意两头来自不同组的奶牛都需要走一定的距离才能相遇。奶牛$ x $ 和奶牛$y $ (其中$ 1 \leq x<y \leq N $ )愿意为了见面走 \((2019201913x+2019201949y) \mod 2019201997\) 英里。
给定一个将 $ N$ 头奶牛分为$ K$ 个非空小组的分组方案,令 \(M\) 为任意两头来自不同组的奶牛愿意为了见面行走的英里数的最小值。为了测试奶牛们相互之间的忠诚度,Farmer John想要将 \(N\) 头奶牛以最佳的方式分为 \(K\)组,使得$M $尽可能大。
输入输出格式
输入格式:
输入仅有一行,包含 $ N$ 和$ K $,用空格分隔。
输出格式:
输出最优的$M $。
输入输出样例
输入样例#1:
3 2
输出样例#1:
2019201769
说明
在这个例子中,奶牛\(1\)和奶牛\(2\)愿意为了见面走\(2019201817\)英里。奶牛\(2\)和奶牛\(3\)愿意走\(2019201685\)英里。奶牛\(1\)和奶牛\(3\)愿意走\(2019201769\)英里。所以,将奶牛\(1\)单独分为一组,奶牛\(2\)和奶牛\(3\)分为一组, $M=min(2019201817,2019201769)=2019201769 $ (这是我们在这个问题中能够达到的最佳结果)。
思路
我们可以把\(x\)奶牛与\(y\)奶牛"愿意为了见面行走的英里数"表示成一个函数:
\]
同时我们定义
\]
那么显然答案是所有\(f(i)\)值由大到小排序的第\(k-1\)个,对应的情况是\(f(i)\)值由大到小排序的第\(1\)个动物到第\(k-1\)个动物每一个自成一组,剩下的所有动物成一组,共\(k\)组.
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define SIZE 7505
#define INF 0x7FFFFFFF
const long long P1=2019201913;
const long long P2=2019201949;
const long long Mod=2019201997;
inline int Fx(long long u,long long v){return (int)((P1*u+P2*v)%Mod);}
int n,k,x[SIZE];
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)x[i]=INF;
for(int u=1;u<=n;u++)
for(int v=u+1;v<=n;v++)
{
int Tem=Fx(u,v);
x[u]=min(x[u],Tem);
x[v]=min(x[v],Tem);
}
sort(x+1,x+1+n);
printf("%d\n",x[n-(k-2)]);
return 0;
}
[USACO19OPEN]I Would Walk 500 Miles 贪心的更多相关文章
- HDU 5335——Walk Out——————【贪心】
Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- hdu 5335 Walk Out 搜索+贪心
Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total S ...
- hdu_1009 贪心
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 越狱Season 1-Episode 1: the pilot
the pilot: 美国电视剧新剧开播都会有一个试播来测试观众对新剧的接受程度,以此来决定是否再继续播下去,也可以说是一个开端,第一集,试播 -Tattoo Artist: That's it. t ...
- F# 之旅(下)
写在前面的话 学习 F# 一定要去体会函数式编程的特点,推荐一下阮一峰的日志<函数式编程入门教程>. 在这篇文章中 递归函数 记录和可区分联合类型 模式匹配 可选类型 度量单位 类和接口 ...
- Deep Introduction to Go Interfaces.
Standard Interface Intro Go’s interfaces are one of it’s best features, but they’re also one of the ...
- NCE3
Lesson1 A puma at large Pumas are large, cat-like animals which are found in America. When reports ...
- POJ1326问题描述
Description Mileage program of ACM (Airline of Charming Merlion) is really nice for the travelers fl ...
- Fast-paced Multiplayer
http://www.gabrielgambetta.com/fpm1.html —————————————————————————————————————————————————————— Fast ...
随机推荐
- python进阶----深拷贝&浅拷贝
复制需要区分,,复制的是源文件的数据,还是指向源文件数据的地址 1.引用 b=a时,理解为b指向了a指向的数据,相当于引用复制 a=[1,2] b=a #验证复制的是数据还是地址 #1.查看ab的 ...
- STL中的Set和Map——入门新手篇
STL中的Set和Map 先来看一段网络上的文字描述: 上图是一段关于STL中Set集合的描述,同样的,也近似适合Map的描述.上述文字中,描述了最为重要的特征: Set和Map,底层调用了红黑树的结 ...
- Android中饼状图的绘制
https://blog.csdn.net/cen_yuan/article/details/52204281
- Wannafly Winter Camp 2020 Day 6H 异或询问 - 二分
给定一个长 \(n\) 的序列 \(a_1,\dots,a_n\),定义 \(f(x)\) 为有多少个 \(a_i \leq x\) 有 \(q\) 次询问,每次给定 \(l,r,x\),求 \(\s ...
- PHP中根据二维数组中某个字段实现排序
想要实现二维数组中根据某个字段排序,一般可以通过数组循环对比的方式实现.这里介绍一种更简单的方法,直接通过PHP函数实现.array_multisort() :可以用来一次对多个数组进行排序,或者根据 ...
- 使用mongoose--写接口
定义数据模型 import mongoose from 'mongoose' mongoose.connect('mongodb://localhost/edu') const advertSchem ...
- react 项目 测试
Enzyme 来自 airbnb 公司,是一个用于 React 的 JavaScript 测试工具,方便你判断.操纵和历遍 React Components 输出.Enzyme 的 API 通过模仿 ...
- scp 后台执行(防止大文件关闭会话丢失)
Linux scp 设置nohup后台运行 Linux scp 设置nohup后台运行 1.正常执行scp命令 2.输入ctrl + z 暂停任务 3.bg将其放入后台 1.正常执行scp命令 从or ...
- git项目分支管理
分支管理 创建项目时,会针对不同环境创建两个常设分支(也可以算主分支,永久不会删除): master :生产环境的稳定分支,生产环境基于该分支构建.仅用来发布新版本,除了从 release 测试分支或 ...
- 在iOS下-input[disabled] 颜色变浅兼容&& input[readonly]仍可获取焦点解决方法
目标:在写input输入框时,想让其只读不写. 环境:在iPhone上 本来用的时readonly,可是readonly,居然可以获取焦点,不能弹出键盘:安卓手机完全木有问题,所以去用了disable ...