Codeforces 1238 C. Standard Free2play
原创
©著作权归作者所有:来自51CTO博客作者wx63db9cf49ed95的原创作品,请联系作者获取转载授权,否则将追究法律责任


题意:
有一个墙,高度为
,在每一个高度处都有一个踏板,小人站在
高度处,这个小人每站到一个踏板上,就可以点一个开关,将他所在的踏板收回,并将下一个高度上的踏板改变状态。小人只能最多落下两层楼,如果从高度为
处落到高度为 
直接模拟即可
如果初始相邻两个突出的平台高度不连续那么我们显然可以直接从上面一步步操作到达下面的平台的上面一个位置,此时考虑如果我们直接操作,那么下面那个平台就会缩起来,如果当前和更下面的平台
高度超过
了,并且用在
位置和用在
下面一个位置都是一样的,那么直接用在
位置就好了如果和
高度不超过
,那么我们显然直接操作然后落到 
AC代码:
const int N = 2e5 + 7;
int q, n, m;
int a[N];
int ans, res, cnt;
int main()
{
sd(q);
while (q--)
{
sdd(n, m);
rep(i, 1, m)
sd(a[i]);
ans = 0;
rep(i, 2, m)
{
if (n <= a[i])
continue;
if (n != a[i] + 1)
n = a[i] + 1;
if (i < m)
{
if (a[i + 1] == a[i] - 1)
n = a[i + 1];
else
ans++, n = a[i];
continue;
}
if (n > 2)
ans++;
break;
}
pd(ans);
}
return 0;
}