2021网易初级游戏研发岗算法题(第二题)

#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

先刷新人物,在刷新地图,

人物刷新完的部分刷新地图时就不用刷新。

人物的像素点全部经过了地图,就可以结束刷新。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值