20160330训练赛

训练赛20160330
4:00:00
 
 
Current Time: 2016-03-31 11:25:03 Contest Type: Public
Start Time: 2016-03-30 17:30:00 Contest Status: Ended
End Time: 2016-03-30 21:30:00 Manager: hrbustacm

A题:物理题水体

B题:字符串处理,水

C:水

D:bfs,,,,需要使用两次bfs进行搜索,第一次搜索人在所有点的最短距离,存在一个数组里,,第二次bfs是在第一次bfs值得基础上在从加速点进行bfs,但是此时需要另外存储一个数组,我们卡了3,4次也是卡在了这里,,,,,,因为可能在有加速器的情况下不适用加速器可能会更快一些,之后暴力终点向四周扩散,扩展到不能移动位置,沿途过程中不断更新时间,最后就得到结果

E题:当时想到了思路,纠结到最后也没敢敲,看完·题解傻眼了,,,,,,这么暴力也可以

首先说b的值得范围为0-90::::因为n的范围是10的18次幂,将n右移,左边提取公因数的情况下,我们会推出x的范围为0-10的9次幂,10的9次幂转化为16进制是6位,每位为15的话,,,,,,6*15==90,其余的暴力就可以了

F题不会,有大一的做出来了,不知道咋做的

G :水题,就是有点坑

a1≤a2≤a3。

所有我们暴力a1,   a2与A3自然就出来了

很明显      X1<=A1<=MIN(Y1,N/3);

假如我们用三层循环暴力的话,三条边都可以用已知量表示出来,根据两边之和大于第三边与两边之和小于第三边的公式,我们可以得到j关于i的一个不等式,于是第二层循环的范围就出来了,我们可以求出两个临界点的值,,,通过n-i-临界点的值我们就可以得到第三条边的临界值,通过第三条边的临界值与x3,y3进行比较,看有多少点在x3-y3之间,累加起来就可以了,

唯一的一点坑就是在累加的过程中可能会出现负数,,负数默认为0

H   字符串,,,通过strstr函数来判断每一个子串的起点和终点,,,对终点进行排序,,,,用两个串的右边的终点减去左边的起点相当于将这两个串合起来的部分左右各干掉一个字符::不断更新即可

I:   判断尾端字符是否在前面出现过,,,,,没出现过得话,dp【i】相当于等于dp[i-1]+前面的所有可能后面再都加上字符a【i】,就又有dp[i-1]种情况,他本省一个字符也是一种情况

所以dp[i]=2*dp[i-1]+1;

当前面出现的时候,    2*dp[i-1]和前面讨论的情况一下,就不需要加1了,因为前面出现过,但是以他为末尾的前面已经有一个字符了,所有减去所有以他们两个相同的字符为结尾的公共部分就可以了

原文地址:https://www.cnblogs.com/13224ACMer/p/5340585.html