牛客网NOIP赛前集训营-提高组(第七场)A-中国式家长 2

题目描述

有一天,牛牛找到了一个叫《中国式家长》的游戏,游戏中需要靠"挖脑洞"来提升悟性。

挖脑洞在一个(N)(M)列的地图上进行,一开始牛牛有(K)点行动力和(0)点悟性,地图上有两种格子:

1、悟性格: 挖悟性格需要减少10点行动力,如果行动力不到10点则无法挖取,挖取成功后悟性会提升(10)

2、行动格: 挖取行动格没有行动力要求,挖取完之后行动力会增加一定点数,但行动力不能超过(K)(比如(K = 150), 当前有(140)点行动力,挖取了一个可以增加(20)点行动力的格子,那挖取完成之后行动力会变成(150)

有一些格子是开启的,另一些格子是关闭的,只允许挖取开启的格子。当一个格子挖取成功后,以它为中心的九宫格内的格子都会开启。(既第x行第y列的格子被挖取之后,第(x - 1)行和第(x + 1)行的第(y - 1)列,第(y)列,第(y + 1)列,第(x)行的第(y - 1)列,第(y + 1)列,这八个格子都会被开启)

每个格子都只允许被挖取一次。

现在给定地图的描述,以及牛牛的挖取顺序,牛牛希望你告诉它这个顺序是否可行,如果可行的话希望你计算出最终剩下多少点行动力,获得了多少点悟性。

输入描述:

第一行输入(N, M, K)代表地图有(N)(M)列,一开始有(K)点行动力(游戏过程中行动力也不能超过(K)

接下来(N)行每行(M)个非负整数,第(i)行的第(j)个非负整数(a_{i,j})描述第i行第j列格子,如果(a_{i,j} > 0)说明这是一个行动格,挖取完之后会获得(a_{i,j})点行动力。否则说明这是一个悟性格。

接下来(N)行每行(M)个非负整数,第(i)行的第(j)个非负整数(b_{i,j})描述第(i)行第(j)列格子在最初是否开启,如果(b_{i,j} = 0)说明这一格没有开启,否则则说明这一格开启了。

接下来一个正整数T代表牛牛一共挖取了(T)

接下来(T)行每行两个整数,第(i)行的两个整数(x_i), (y_i)代表牛牛的第i个操作:挖取第xi行第yi列的格子

对于(100\%)的数据,(1 leq N, M, K leq 200), (0 leq a_{i,j} leq k), (0 leq b_{i,j} leq 1), (1 leq T leq N imes M), (1 leq xi leq N), (1 leq y_i leq M)

输出描述:

输出一行两个整数代表最终剩下的行动力点数、获得的悟性的点数

如果挖取过程不合法则输出一行-1 -1

挖取不合法有以下几种可能:

  1. 试图挖取一个没有开启的格子
  2. 试图重复挖取一个格子
  3. 行动力小于10的时候尝试挖取一个悟性格

只要挖取过程中的任何一步不合法,挖取过程就不合法

示例1

输入

2 2 20
10 0
0 0
1 0
0 0
3
1 1
1 2
2 1

输出

0 20

说明

一开始有(20)点行动力,(0)点悟性。第一步挖取第一行第一列的格子,这格是行动格,不需要消耗行动力,可以增长(10)点行动力,且一开始就是开启的,但由于行动力最多只能有(K)点,挖取完成后还是(20)点行动力,(0)点悟性。第一格挖取之后,剩下的格子都开启了,因此接下来两次挖取都是合法的,每次减少(10)点行动力,增加(20)点悟性。因此最后剩余(0)点行动力,(20)点悟性。

示例2

输入

2 2 20
10 0
0 0
1 0
0 0
1
1 2

输出

-1 -1

说明

第一行第二列的格子没有开启,所以挖取失败了

示例3

输入

2 2 20
10 0
0 0
1 0
0 0
2
1 1
1 1

输出

-1 -1

说明

一个格子只能挖取一次,因此第二次挖取失败了

示例4

输入

2 2 20
10 0
0 0
1 0
0 0
4
1 1
1 2
2 1
2 2

输出

-1 -1

说明

最后一次挖取时,行动力已经不够了,因此最后一次挖取失败了

Solution

纯模拟题,没什么好说的。

写这个题解的主要目的是想给大家讲笑话。

有一个叫hkk的傻逼,今天上午考试的时候,看了一眼T1:哎呀,怎么又是这种神仙题啊,怎么那么不可做啊,获得能量值是不是还要建一个分层图来搞搞啊。

一个半小时以后:这个好像是傻逼题啊,等等,再好好看看在写。

两个小时以后:好像确实是傻逼题啊,开始写吧。

考完以后,这道题只拿了30分,于是又看了一遍题目,不知道脑子又哪儿短路了:这好像确实是不可做题啊,怎么全场都A啦,是不是数据太弱啊。

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
#define lowbit(x) ((x)&(-(x)))
#define REP(i,a,n) for(register int i=(a);i<=(n);++i)
#define PER(i,a,n) for(register int i=(a);i>=(n);--i)
#define FEC(i,x) for(register int i=head[x];i;i=g[i].ne)
#define dbg(...) fprintf(stderr,__VA_ARGS__)
namespace io{
	const int SIZE=(1<<21)+1;char ibuf[SIZE],*iS,*iT,obuf[SIZE],*oS=obuf,*oT=oS+SIZE-1,c,qu[55];int f,qr;
	#define gc() (iS==iT?(iT=(iS=ibuf)+fread(ibuf,1,SIZE,stdin),(iS==iT?EOF:*iS++)):*iS++)
	inline void flush(){fwrite(obuf,1,oS-obuf,stdout);oS=obuf;}
	inline void putc(char x){*oS++=x;if(oS==oT)flush();}
	template<class I>inline void read(I &x){for(f=1,c=gc();c<'0'||c>'9';c=gc())if(c=='-')f=-1;for(x=0;c<='9'&&c>='0';c=gc())x=x*10+(c&15);x*=f;}
	template<class I>inline void write(I x){if(!x)putc('0');if(x<0)putc('-'),x=-x;while(x)qu[++qr]=x%10+'0',x/=10;while(qr)putc(qu[qr--]);}
	inline void print(const char *s){while(*s!='')putc(*s++);}
	inline void scan(char *s){for(c=gc();c<=' ';c=gc());for(;c>' ';c=gc())*(s++)=c;*s='';}
	struct Flusher_{~Flusher_(){flush();}}io_flusher_;
}//orz laofudasuan
using io::read;using io::putc;using io::write;using io::print;
typedef long long ll;typedef unsigned long long ull;
template<typename A,typename B>inline bool SMAX(A&x,const B&y){return x<y?x=y,1:0;}
template<typename A,typename B>inline bool SMIN(A&x,const B&y){return y<x?x=y,1:0;}
 
const int N=200+7;
int n,m,k,T,wx,K,x,y,a[N][N],b[N][N],vis[N][N];
 
int main(){
#ifndef ONLINE_JUDGE
	freopen("A.in","r",stdin);freopen("A.out","w",stdout);
#endif
	read(n),read(m),read(k);K=k;
	for(register int i=1;i<=n;++i)for(register int j=1;j<=m;++j)read(a[i][j]);
	for(register int i=1;i<=n;++i)for(register int j=1;j<=m;++j)read(b[i][j]);
	read(T);
	for(register int i=1;i<=T;++i){
		read(x),read(y);
		if((!a[x][y]&&k<10)||!b[x][y]||vis[x][y])return print("-1 -1
"),0;
		else{
			b[x-1][y-1]=b[x-1][y]=b[x-1][y+1]=
			b[x][y-1]=b[x][y+1]=
			b[x+1][y-1]=b[x+1][y]=b[x+1][y+1]=1;
			vis[x][y]=1;
			if(a[x][y])k+=a[x][y],SMIN(k,K);else k-=10,wx+=10;
		}
	}
	write(k),putc(' '),write(wx),putc('
');
}
原文地址:https://www.cnblogs.com/hankeke/p/nowcoder-noiptg7-A.html