这道题的题意是,一些学生说出他们各自的排名范围(不存在并列),然后有的学生说谎了,结果就产生了矛盾。比如有 3 个学生分别都说自己的排名是 1 ~ 2 名,那么肯定至少有一个学生说谎。题目要求计算出最多有几个学生说了真话,并且把那些说真话的学生序号输出。如果有多种情况,输出字典序最高的那种。

数据范围,最多有 100 cases, 学生最多 60 名。排名的话,以区间 [x, y] 表示,其中 1 ≤ x ≤ y ≤ 100000.

开始看这个数据,想起队友 WH 说的,如果有那些 30 啊 60 啊之类的东西,就想想是不是动规,因为那些 30 或者 60 刚好是 32 位整型和 64 位整型能表示的东西。

然后我看到区间,而且范围还挺大,就不禁想到线段树。

后来还是没有想法。Google 了一下,发现前人居然是用二分图匹配来写的。感觉这还是有点勉强啊,而且出题者设计的数据也太容易让人想歪了。

源代码如下:

原创文章,转载请注明来源:http://euyuil.com/3195/acm-icpc-2010-tianjin-im-telling-the-truth/