题目链接
题意
一个n*n的棋盘,第n行(最下面)是己方的棋子,第1行(最上面)是敌方的棋子。gregor在一轮中只移动自己的棋子。如果没有棋子挡着的话,就可以直接向正上方走。而棋子向左上和右上行走是当且仅当他正方有棋子的时候。同时己方棋子到达的位置上的敌方棋子也会被移除。要求求出可可以到达第一行的最大的棋子数。
思路
不难。首先的话中间大片的空白是不需要考虑的,直接直走的就好了。扫描到己方棋子的时候,如果其正上方没有棋子的话,直接直走就好。如果有的话, 观察左上方和右上方是否有棋子。
需要注意的问题:1.越界问题 2.更新敌方棋子的状态(1->0)
代码
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define Endl "\n"
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e5+5;
const int INF = 0x3f3f