Codeforces Round #812 A~D题解(CF1713)

CF1713A~D题解
摘要由CSDN通过智能技术生成

A Traveling Salesman Problem

题意简述:

在坐标平面中,给你 n n n 个点,这些点只在 x x x 轴或 y y y 轴上,求 ( 0 , 0 ) (0,0) (0,0) 点出发,经过所有的点,再回到 ( 0 , 0 ) (0,0) (0,0)的最短距离。
此题的关键就是:出发点和终点都在 ( 0 , 0 ) (0,0) (0,0) ,所以会形成一条闭合的回路。


通过观察题目中给的样例解释,容易发现,这条回路可以平移成一个矩形,但样例中每条射线上最多只有一个点,那么多个点能不能平移成矩形呢?

图片

对于多个点,这是成立的,路径通过平移构成一个矩形(至于为什么,请读者思考)。

长度也很好计算,这个矩形的长为 x x x 轴上两个最远的点之间的距离,同理,宽为 y y y 轴上两个最远的点之间的距离。

code:

min1=min2=max1=max2=0;//初始值要给0,因为有可能存在某条射线上没有点
for(i=1;i<=n;i++)
{
   
	cin>>x>>y;
	min1=min(min1,x);
	max1=max(max1,x);
	min2=min(min2,y);
	max2=max(max2,y);
}
ans=2*(max1-min1+max2-min2);

B Optimal Reduction

题意简述:

给定一个长度为 n n n 的正整数数组 a a a ,每次可以使 a l , a l + 1 , ⋯   , a r 减 1   ( 1 ≤ l ≤ r ≤ n ) a_l,a_{l+1},\cdots,a_r \text{减}1\ (1\le l\le r\le n) al,al+1,,ar1 (1lrn) 。记 f ( a ) f(a) f(a) 表示将 a a a 数组中的元素全部更改为 0 0 0 的最小次数。对于 a a a 的任意一个排列 b b b ,求是否存在 f ( a ) ≤ f ( b ) f(a)\le f(b) f(a)f(b)

朴素想法:

枚举每个 b b b ,判断是否 f ( b ) ≤ f ( a ) f(b)\le f(a) f(b)f(a) ,但是 1 ≤ n ≤ 1 0 5 1\le n\le 10^5 1n105 ,这样做铁定 T L E TLE TLE


我们不妨求能否构造一个 b b b ,使得 f ( b ) < f ( a ) f(b)<f(a) f(b)<f(a)
通过测试样例容易发现,对于给定的数组 a a a ,如果存在 a i < max ⁡ 1 ≤ k < i a k a_i < \max \limits_{1\le k<i }a_k ai<1k<imax

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值