- 【题目描述】
- 【Input Format】
- 【Output Format】
【Sample Input】
5 5 4 12
1 9 1 4 4
1 9 1 2 4
1 9 1 1 2
2 9 2 7 3
2 3 2 6 1
10 5 8 1 3 1 1 0
20 10 5 1 2 2 1 0
19 10 5 1 2 5 2 1
25 25 3 1 1 5 5 0
Round of 0
Action of character 2
Move to (5,1)
Attack 3
Action of character 1
Move to (3,1)
Round of 1
Action of character 3
Drive out 1
Round of 0
Action of character 2
Drive out 3【Sample Output】
0
9
6
INVALID
-1【数据规模与约定】
对于80%的数据,不存在不合法事件。
对于100%的数据,参见输入输出格式中给定的范围与保证。
【题解】模拟啊模拟 // 近几年复赛喜欢出的模拟题QAQ
{细节一}死掉的角色必须将其所有信息清空好,以免干扰后续行动;
{细节二}图上的点相当于有点权,必须用spfa而非广搜;spfa时记得判断移动力清零情况及边界问题;
{细节三}C++读入时要格外小心,听说好多god直接用读入优化,我就默默写了个长长的读入QAQ;
{细节四}如果某角色移动前后位置不变,即使它旁边存在其他阵营角色,其剩余行动力为初始行动力;
{细节五}大概没了有了再说呗。。。
//还是看程序吧哎TAT
#include <cstdio>
#include <cstring>
#define N 105
#define inf 1000000000
const int fx[4][2]={
{
0,-1},{
0,1},{-1,0},{
1,0}};
int n,m,c,e,x,Gr,hp[N],at[N],mv[N],ad[N][2],st[N][2],gr[N],
a[N][N],q[N*N*100][2],g[N][N],op[10005][2],f[N][N];
bool bo[N][N],die[N];char s[10005][3];
int bfs(int sx,int sy,int tx,int ty,int be,int ss)
{
for (int i=1;i<=n;++i)
for (int j=1;j<=m;++j) bo[i][j]=false;
for (int i=