[现场赛]“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛

solved 7

rank 9

第一次现场赛,前期因为抢一血心态罚时双爆炸,还好最后勉强拿了一等奖,蓝牙音箱还不错,可惜奖金没了啊。。

教训:1.一个题确定没写错交三次以上还没过就不要盲目优化了,考虑是不是算法错了

   2.不要盲目抢一血了,自己太菜就还是老老实实跟榜吧

   3.罚时终极爆炸,甚至是前一名的将近两倍,甚至比大多数八题还多。。除了E题之外还有好多没必要的罚时,BD为了抢一血甚至有两发样例都没过的罚时。。以后还是最好自己手造几组数据,毕竟一次罚时20分钟

A

题意:签到

(手速太慢抢不到一血啊)

00:02 (1A)

B

题意:签到

(手速太慢抢不到一血甚至还贡献了一发罚时)

00:08 (2A)

C

题意:给出一个随机生成的小写字母字符串,问有多少个长度大于等于m的不同的子串

因为字符串是随机生成的,显然长度比较大的子串相同的概率很小,那么对于长度小的用map暴力计数就可以,大的就当作不会重复套公式就好。比赛的时候临界点设为12就跑过了。

(这道题过的人好少啊。。出来之后听说好多人的双哈希都被卡了,还好我偷懒用了map。。)

02:37(3A)

D

题意:给出一个字符串,可以删除若干个字符,满足原字符串出现的每个字符出现一次,求字典序最小的删除方法。

从前往后扫,用一个栈维护当前选择的字符,对于这个字符已经在栈内就不用管,如果不在栈内,就一直出栈直到栈顶字符比当前字符小或者后边不再有了了,然后把这个字符进栈。乱搞的,不会证明。

(为了抢这题的一血差点自闭。。)

02:52(3A)

E

题意:给出两个元素各不相同的数列,可以任意交换一个数列的两个元素,求最少交换多少次使对应元素的乘积和最小。

排序不等式,最大的对最小的乘积和最小,这样根据a数列就能知道b数列每个元素应该放哪,这个交换次数有结论是数列长度减去循环个数,比如4——>2,2——>3,3——>4就是一个循环。好像直接贪心交换也可以。离散化预处理搞一搞就好了。

(因为之前做过类似的题,就想当然以为要一个升序一个降序,然后就从开题WA到封榜,还好最后发现自己弱智了,不然可能一等奖就没了吧。。)

04:24(11A)

F

题意:找规律

我这么不擅长打表都看出来这题的规律了,出题人也太良心了吧。。

02:26(1A)

G

题意:有n个人分s道题,m个关系,每个关系描述的是一个人要比另一个人多做k*ri个题,不会出现矛盾,求k的最大值。

看起来挺像二分的,但仔细一看发现压根用不着,直接拓扑排序求出最后一共要做多少倍的k,用s除一下就好了。

01:46(1A)

H
题意:有一个n维空间,每一维大小不同,给出每个坐标的物品的目标坐标,可以任意交换两个物品,求最少交换次数 。

把坐标映射成整数,然后就是E题了。。。甚至不用离散化

(还剩6分钟过的E,3分钟码的H还是WA了。。不过赛后知道就算过了也拿不到奖金,就也无所谓了哈哈哈)

原文地址:https://www.cnblogs.com/xutianshu/p/10640237.html