列表

详情


NC53785. 被鸽了的美男老师K

描述

众所周知美男老师K和同学们约好了放假去看老师

众所周知美男老师K和同学们约定了于6点的大操场见面

众所周知,题目已经告诉你了他被鸽了

于是美男老师K很气愤,想要把他们抓住全都埋了

他们正处在一条赛道上(可以抽象成一条数轴)。

K位于0的位置,每秒往+∞的位置移动一格

n个同学分别处在赛道的某个点上,当前向L/R移动一个

如果一个同学任意时刻碰到了K,他将被K埋在土里,无法自拔。

我们假设K把同学们埋下去不需要时间

如果两个同学发现在某一个整数时刻他们处在同一个整点那么他们都会向后转,如原来向右走的变成向左走

K想知道1~t秒之间他埋了多少个人

输入描述

一行俩个整数n,t
接下来n行,每行两个整数a,b b=0表示下一步向左走,否则表示向右走

输出描述

一个整数,表示K埋了多少人

示例1

输入:

4 5
1 1
2 1
3 1
5 0

输出:

1

说明:

一开始:

1 2 3 5

1 1 1 0

第一秒:

2 3 4 4

1 1 0 1

第二秒:

3 4 3 5

0 1 1 1

第三秒:

2 5 4 6

……

后面的不用看了,就第1个被埋了。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 8ms, 内存消耗: 488K, 提交时间: 2019-10-01 11:06:32

#include<bits/stdc++.h>
using namespace std;

const int maxn=2e3+10;

int i,j,n,m,k,x,y,a[maxn],b[maxn],f[maxn];

int main()
{
	scanf("%d%d",&n,&m);
	for( i=1;i<=n;i++ )
	{
		scanf("%d%d",&x,&y);
		a[i]=x,b[i]=y;
	}
	for( i=0;i<m;i++ ) // 模拟每一步 
	{
		memset(f,0,sizeof(f));
		for( j=1;j<=n;j++ )
		{
			if( a[j]<=i ) continue;
			a[j]+= b[j] ? 1 : -1;
			f[a[j]]++; 
		}
		for( j=1;j<=n;j++ )
		{
			if( f[a[j]]>1 ) b[j]^=1;
		}
	}
	for( i=1;i<=n;i++ ) k+= a[i]<=m ;
	printf("%d\n",k);
}

上一题