The 2018 ACM-ICPC (青岛)-H题-Traveling on the Axis(找规律+前缀和)

好几个题的代码都找不到了,写一写打开cb唯一剩的一道题的代码吧。

题目链接

 

1代表绿灯,0代表红灯。

红灯的时候要等一秒,绿灯可以直接通过,穿过一个灯也需要耗费一秒钟。

问耗费的总时间。

具体计算方法见题目的hint......(

 

思路:

算是找了下规律,规律如下:

第一个灯如果为1,那么通过的时间为1秒,如果为0,那么时间需要两秒。

从第二个灯开始,如果当前灯的状态和前面的相同,那么时间加两秒,不同加一秒。

如第三组样例  11010

1+3+4+5+6

    1+2+3+4

        2+3+4

            1+2

                2

答案为43

那么再看上面的和,每次减去第一项(1或者2),后面的项有两种情况,可能会每一项减去2,也可能不变。

那么什么时候对应上面的两种情况呢?

再看

相邻的两种灯的状态有四种:00  01  10  11

只有当10的时候,后面的项不变,否则每项都减去了2.

 

最后只需要维护一个前缀和,每一次做个差分再加和即可。

 

#include
#include
#include
#include
#include
#include
#define memset(a,v)  memset(a,v,sizeof(a))
#define max(a,b)   (a>b?a:b)
#define min(a,b)   (a

 

你可能感兴趣的:(区域网络赛,无处可归的题)