Little Zhang生活在依山傍水的平原上,他的房子前面有一块 n×n(1≤n≤1000) 的空地.
有一天他回家时,发现空地上有 m(1≤m≤100000) 只怪物(一种遇到人会爆炸的怪物)。这种怪物有一种特性,就是它会沿着直线每秒前进一格,当多个不同方向的怪物撞在一起(到达同一个格子的时候)他们会选择性继承这一格其他怪物的方向,并在下一时刻转向继承的怪物之前所朝向的方向继续移动,每只怪物只能继承其他怪物的方向,每只怪物也只能在同一时刻被继承一次。例如,当一只向左的怪物1和向上的怪物2撞在一起时,向左的怪物1由于不能继承自己的运动方向(同一只)所以继承了怪物2的,下一时刻怪物1向上走,怪物2向左走。
为了不被怪物炸死,Little Zhang 打算等所有怪物走出这片空地的时候再 打开门。现在给你 m 只怪物的起始位置和方向,问至少需要多少秒,Little Zhang 才能打开门。
输入格式:
单组数据,第一行是被空格隔开的两个整数,分别代表 n,m(1≤n≤1000,1≤m≤100000)。
接下来 m 行,每行 3 个整数,被空格隔开,分别表示 x,y,p(1≤x,y≤n);
-
p=1,向上,即 (x,y) → (x−1,y);
-
p=2,向右,即 (x,y) → (x,y+1);
-
p=3,向下,即 (x,y) → (x+1,y);
-
p=4,向左,即 (x,y) → (x,y−1)。
输出格式:
输出一个整数表示需要等待的时间。
输入样例:
2 2
1 1 1
2 2 3
输出样例:
1
代码长度限制
16 KB
Java (javac)
时间限制
1000 ms
内存限制
64 MB
Python (python2)
时间限制
1000 ms
内存限制
64 MB
Python (python3)
时间限制
1000 ms
内存限制
64 MB
其他编译器
时间限制
500 ms
内存限制
64 MB
栈限制
8192 KB
#include<bits/stdc++.h>
using namespace std;
int main(){
//不要管题目中的继承
int a,b;
cin>>a>>b;
int maxx=0;
for(int i=0;i<b;i++){
int x,y,z;
cin>>x>>y>>z;
if(z==1) maxx=max(maxx,x);//z=1时向上走你只要考虑怎么走出a*a的方针比如(1,1)
// 这个点2*2大小的方阵(向上走的情况)是不是只要向上走1不就走出方阵了其他几个方向也是这个道理画个图推一下就行
if(z==2) maxx=max(maxx,a-y+1);
if(z==3) maxx=max(maxx,a-x+1);
if(z==4) maxx=max(maxx,a-y-1);
}
cout<<maxx<<endl;
return 0;
}