cf Match Points 一个骚题目

一个骚题目,自己真是naive,真是naive

http://codeforces.com/contest/1156/problem/C

俄罗斯英语看着真几把费劲。

本以为贪心就完了,但是却想当然了,这个题目得好好反思,做了两个题目排名900多???我服了。

假设我们已经有了一个最终的最优答案,那么有如下两个观察:

1.那么我们可以证明两对match的点(a,b)和(c,d)中,两者必然可以不嵌套,就是a<c<d<b。因为我们基于d-c>z那么必有d-a>z那么可以解这个嵌套的情况为(a,d)和(c,b)。

2.两对match的点(a,b)和(c,d)中,两者必然可以相交。因为如果a<b<c<d,容易证明(a,c)和(b,d)必然也是合法的。

很容易根据观察1想到滑动窗口是不???

naive!!!

因为:

滑动窗口的题目->答案不嵌套

答案不嵌套 ≠ 滑动窗口

两者不是充要的。行,今天长记性了!

反例:

n=4    z=2

arr= [  1 , 3 , 4  ,  5   ]

滑动窗口的话:1和3匹配完了,4和5匹配不了,于是只能成1对。

但是最优答案是(1,3),(3,5)

而观察2证明的匹配对必然相交让我们的右边界必须从数组的右半边来找。

如果答案是n//2那么匹配的两边各来自左右半边才能符合观察2,对不?而且还是从小到大一一对应。

最好能用最优答案转换的方法证明这个结论是对的,因为现在还是不显然。

原文地址:https://www.cnblogs.com/waldenlake/p/10801419.html

时间: 2025-01-14 20:24:49

cf Match Points 一个骚题目的相关文章

Codeforces C Match Points

题目描述: Match Points time limit per test 2 seconds memory limit per test 256 mega bytes input standard input output standard output You are given a set of points x1, , ..., *x**n* Two points iand jcan be matched with each other if the following conditi

nyoj 96 一个水题目

虽然很简单,发现自己用内存太高了了,算了,我就是这水平了. 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数. 输入 第一行为M,表示测试数据组数.接下来M行,每行包含一个测试数据. 输出 输出M行,每行为对应行的n-1位数(忽略前缀0).如果除了最高位外,其余位都为0,则输出0. 样例输入 4 1023 5923 923 1000 样例输出 23923230 #include<iostream> using namespace

一个小题目的三种不同的解法

有一道很经典的Java题目,虽然很简单,但是可以开发出很多种不同的解法,这是我在今天重新复习了正则的时候,忽然回想起来的.题目的名字是:"查找一个小串在大串中出现的次数."有三种思路,第一种,利用substring,通过寻找小串出现的位置,改变大串从小串出现的位置处重新寻找小串的位置,以此类推.第二种解法,直接用小串分割大串,分割出的字符串数组长度-1即是小串出现的次数,但是这时要考虑一种特殊情况,即小串出现在末尾处.这时候字符串数组的长度就是小串出现的次数.第三种利用正则表达式中Pa

shell脚本,一个经典题目。

[[email protected] wyb]# cat zhuijiu.sh #!/bin/bash #1.写一个脚本执行后,输入名字,产生随机数01-99之间的数字. #2.如果相同的名字重复输入,抓到的数字还是第一次抓取的结果, #3.前面已经抓到的数字,下次不能在出现相同数字. #4.第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出,继续等待别的学生输入 file=file99 echo "press q to quit" [ ! -f 99.txt ]

第一个leetcode题目: two sum

第一个leetcode,大概意思:在一个数组里,任意找两个数字,让它们的和等于一个给定目标值.要求:1.输出这两个数在数组的下标 2.保证第一个数的下标要小于第二个数的下标 做这个题,还是有一点点欣慰的地方就是:读完题,就有思路,而且能顺利编出来.(虽然因为那个小小的 return b 修改了好几次) public class Solution { public int[] twoSum(int[] nums, int target) { int[] b = new int[2]; for(in

Python的一个“骚操作”!

PS作为世界四大发明之一可以说被广大网友用到了极致,只有你想不到的没有我P不了的,任何正经的图片在都可以变成搞笑图片(比如下图)当然也可以用ps做一点正经的事情. 作为一个爱折腾的程序猿能用代码的解决的事情绝对不会用其他的方式,Python可以打飞机,人工降雪,那么p个图对于Python来说是小儿科了,今天就教给大家Python之p图大法. 具体介绍 今天P图主要用到的就是PIL库. PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的

一个算法题目: 三角形

输出结果 5 4 3 2 1 a4 3 2 1 b3 2 1 c2 1 d1 e public class Test { /** * @param args */ public static void main(String[] args) { NumPrinter numPrinter = new NumPrinter(); CharPrinter charPrinter = new CharPrinter(); int charst = 97; for (int st = 5; st >=

一个笔试题目,大家看看怎么实现uav

喇叭花是童年的花.纵使岁月氤氲,世事变迁,那些粉的.蓝的.紫的花儿,依然迎着清晨的太阳,挂着新鲜的露珠,朵朵清晰.明丽,绽放于记忆最深处. 听母亲说,我出生后曾和外公外婆同 每当昏夜来临,在夜深人静之时,想浅写那些内心深处那份独白,却不想,黑暗已浸透我那疲惫的身躯. 言落汐 1 我爱的不多,只要一点点就够. 起初,只是有过相遇,不想偶有相牵,也不曾想过有最后不经意的相拥. 也许这个世界相遇并非偶然.有的人来到你身边 空气冷了,时间也变得冷漠. 日子,总是这般不舍昼夜地挨个儿遗落. 曾经的那些存在

一个关于字符串匹配的算法题目

有这样一个算法题目 假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些.从算法是讲, 什么方法能最快的查出所有短字符串里的字母在长字符串里都有? 比如,如果是下面两个字符串: String 1: ABCDEFGHLMNOPQRS String 2: DCGSRQPOM 答案是true,所有在string2里的字母string1也都有.如果是下面两个字符串: String 1: ABCDEFGHLMNOPQRS String 2: DCGSRQPOZ 答