zoukankan      html  css  js  c++  java
  • CCF

    1

    2

    3

    4

    5

    5

    BFS从安全地区方向搞一下就好了

    1.还是注意每回合清空
    2.posx居然开小了,可不能犯这种错误
    3.地图用a和节点的dis重名了,建议其他变量禁止用a命名
    4.在输入数据之前continue了,这样会导致读数据混乱
    5.注意距离还是用勾股定理那种,不是你想象的曼哈顿距离,火焰纹章玩多了吧

    #include <set>
    #include <map>
    #include <cmath>
    #include <queue>
    #include <bitset>
    #include <stack>
    #include <vector>
    #include <string>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <functional>
    #define ll long long
    #define mm0(a) memset(a,0,sizeof(a))
    #define mm(a,b) memset(a,b,sizeof(a))
    #define each(a,b,c) for(int a=b;a<=c;a++)
    #define de(x) cout << #x << " " << (x) <<endl
    //#define de(x) cout <<""
    #define rush() int T;scanf("%d",&T);each(kase,1,T)
    #define scan(a,b) scanf("%d%d",&a,&b)
    #define fin(a) scanf("%d",&a)
    using namespace std;
    
    const int maxn = 400+5;
    const int maxm = 1e5+5;
    const int INF = 0x3f3f3f3f;
    inline int read(){int s=0;char ch=getchar();for(; ch<'0'||ch>'9'; ch=getchar());for(; ch>='0'&&ch<='9'; ch=getchar())s=s*10+ch-'0';return s;}
    
    /**
    4 2 4 1 1
    0 3
    1 1
    2 2
    3 0
    1 2
    2 0
    2 3 2
    1 3
    3 3
    n m e f h
    */
    
    int distance(int x,int y,int sx,int sy)
    {
        return abs(x-sx)*abs(x-sx)+abs(y-sy)*abs(y-sy);
    }
    int n,m,e,f,h;
    int a[maxn][maxn];
    int vis[maxn][maxn];
    int dis[maxn][maxn];
    int dx[]={0,0,1,-1,1,1,-1,-1};
    int dy[]={1,-1,0,0,-1,1,-1,1};
    int posx[maxm];
    int posy[maxm];///开小了
    int life[maxm];
    struct node
    {
        int x,y;
        int dis;
        node(int x,int y,int dis):x(x),y(y),dis(dis){}
    };
    int main()
    {
        scanf("%d%d%d%d%d",&n,&m,&e,&f,&h);
        each(i,1,e)
        {
            int x,y;
            scan(x,y);
            a[x][y]=1;
        }
        each(i,1,m)
        {
            scanf("%d%d",&posx[i],&posy[i]);
        }
        each(i,1,m)
            life[i]=h;
        while(f--)
        {
            ///每回合清空
            mm0(vis);
            memset(dis,INF,sizeof(dis));
            int sx,sy,r;///又重名了!!!!
            scan(sx,sy);
            scanf("%d",&r);
            queue<node>Q;
            while(!Q.empty())Q.pop();
            each(i,0,n-1)
            {
                each(j,0,n-1)
                {
                    if(distance(i,j,sx,sy)<=r*r)
                    {
                        vis[i][j]=1;
                        dis[i][j]=0;
                        Q.push(node(i,j,0));
                    }
                }
            }
            while(!Q.empty())
            {
                node q=Q.front();
                Q.pop();
                int x=q.x;
                int y=q.y;
                int curdis=q.dis;
                int nx,ny;
                for(int i=0;i<=7;i++)
                {
                    nx=x+dx[i];
                    ny=y+dy[i];
                    if(!vis[nx][ny]&&nx>=0&&ny>=0&&nx<n&&ny<n&&a[nx][ny]==0)
                    {
                        if(abs(dx[i])!=abs(dy[i])||!(a[nx][y]==1&&a[x][ny]==1))
                        {
                            vis[nx][ny]=1;
                            dis[nx][ny]=curdis+1;///重名
                            Q.push(node(nx,ny,curdis+1));
                        }
                    }
                }
            }
    
            each(k,1,m)
            {
    
                int xx,yy;
                scan(xx,yy);
                if(life[k]==0)continue;///错误3
                int cost=dis[posx[k]][posy[k]];
                if(cost>=life[k])
                    life[k]=0;
                else life[k]-=cost;
                posx[k]=xx;
                posy[k]=yy;///错误4
            }
        }
        each(i,1,m)
        {
            printf("%d
    ",life[i]);
        }
    
        return 0;
    }
    
  • 相关阅读:
    获取非行间样式
    获取非行间样式
    prompt 方法显示输入对话框
    comfirm 方法显示对话框
    移动端页面常见问题及解决方案
    原生js怎样获取后台端口数据
    canvas描绘渐变的矩形
    cookie 的增加,销毁,读取
    canvas 绘制图形
    数组的排序,去重复
  • 原文地址:https://www.cnblogs.com/Tony100K/p/11649939.html
Copyright © 2011-2022 走看看