#include <cstdio>
#include <cstring>
struct Point{
int x;
int y;
char c;
bool ex;
};
int val[105][105];
int main(){
freopen("in.txt","r",stdin);
int T,W,H,P,Q;
int x,y,va,vb;
scanf("%d",&T);
while( T-- ){
scanf("%d%d",&W,&H);
char map_image[W][H];
for(int i=0; i<H; i++ ){
scanf("%s",map_image[i]);
}
Point map[W][H];
for( int i=0; i<W; i++ ){
for( int j=0; j<H; j++ ){
map[i][j].x = i;
map[i][j].y = j;
map[i][j].c =map_image[i][j];
map[i][j].ex = true;
}
}
scanf("%d%d",&P,&Q);
char human_image[P][Q];
for( int i=0; i<Q; i++){
scanf("%s",human_image[i]);
}
scanf("%d%d%d%d",&x,&y,&va,&vb);
Point poi[P][Q];
for( int i=0; i<P; i++){
for( int j=0; j<Q; j++ ){
poi[i][j].x = x + i;
poi[i][j].y = y + j;
poi[i][j].c = human_image[i][j];
poi[i][j].ex = true;
}
}
//准备完毕
int ans = 0;
int cnt = P*Q;
char game_view[W][H];
for( int i=0; i<W; i++ ){
for( int j=0; j<H; j++ ){
game_view[ map[i][j].x ][ map[i][j].y ] = map[i][j].c;
}
}
while( cnt ){
memset(val,0,sizeof(val));
//刷新人物
for( int i=0; i<P; i++ )
{
for( int j=0; j<Q; j++ ){
if (poi[i][j].ex &&
poi[i][j].x>=1 && poi[i][j].x<=W
&& poi[i][j].y>=1 && poi[i][j].y<=H ) {
if( game_view[ poi[i][j].x-1 ][ poi[i][j].y-1 ] != poi[i][j].c )
{
ans ++ ;
game_view[ poi[i][j].x-1 ][ poi[i][j].y-1 ] = poi[i][j].c;
}
val[ poi[i][j].x-1 ][ poi[i][j].y-1 ] = 1;
}
}
}
//刷新地图
for( int i=0; i<W; i++){
for( int j=0; j<H; j++ ){
if( val[ map[i][j].x ][ map[i][j].y ] == 0 &&
game_view[ map[i][j].x ][ map[i][j].y ] != map[i][j].c){
game_view[ map[i][j].x ][ map[i][j].y ] = map[i][j].c;
ans++;
}
}
}
//清除和移动
for( int i=0; i<P; i++){
for( int j=0; j<Q; j++ ){
if( poi[i][j].ex ){
//点越界且速度不匹配清除
if( (poi[i][j].x>W && va>0)
|| ( poi[i][j].y>H && vb>0)
|| ( poi[i][j].x<0 && va<0)
|| ( poi[i][j].y<0 && vb<0)
|| (va==0 && vb==0 ))
{
poi[i][j].ex = false;
cnt -- ;
}
else{
poi[i][j].x += va;
poi[i][j].y += vb;
}
}
}
}
}
printf("%d\n",ans);
}
return 0;
}
/*
4
4 4
....
....
....
....
3 3
.O.
/|\
./\
0 0 1 1
1 1
.
1 1
|
100 100 100 100
1 1
.
1 1
|
0 0 1 1
1 1
.
1 1
|
0 0 0 0
答案
26
0
2
0
*/
笔试完写的,样例过了,但不知道能不能A。
请问什么时候能再看笔试卷呢?
刷新游戏画面
emm
先刷新人物,在刷新地图,
人物刷新完的部分刷新地图时就不用刷新。
人物的像素点全部经过了地图,就可以结束刷新。