• COJ 1692:模拟


    感觉有点难写。。模拟都这样

    直接暴力每一个点的轨迹,看看最多能过几个点就行了

    问题就在于每一个点经过之后会消失,所以我们需要处理一下

    我的处理方法是对于每一个点,用set维护它所能到达的点以及两点间的距离,并且按距离排序,距离短的点先消失

    #include"cstdio"
    #include"queue"
    #include"cmath"
    #include"stack"
    #include"iostream"
    #include"algorithm"
    #include"cstring"
    #include"queue"
    #include"map"
    #include"set"
    #include"vector"
    #define LL long long
    #define mems(a,b) memset(a,b,sizeof(a))
    #define ls pos<<1
    #define rs pos<<1|1
    #define max(a,b) (a)>(b)?(a):(b)
    using namespace std;
    
    const int N = 3005;
    const int MAXN = 200;
    const int INF = 0x3f3f3f3f;
    
    struct node{
        int x,y;
        char d[2];
    }p[N];
    
    set<pair<int,int> > G[N];
    int vis[N],cnt;
    
    void check(int i,int j){
        if(p[i].x!=p[j].x&&p[i].y!=p[j].y) return ;
        if(p[i].x==p[j].x){
            if(p[i].y<p[j].y){
                if(p[i].d[0]=='v') G[i].insert(make_pair(p[j].y-p[i].y,j));
                if(p[j].d[0]=='^') G[j].insert(make_pair(p[j].y-p[i].y,i));
            }
            else{
                if(p[i].d[0]=='^') G[i].insert(make_pair(p[i].y-p[j].y,j));
                if(p[j].d[0]=='v') G[j].insert(make_pair(p[i].y-p[j].y,i));
            }
        }
        else{
            if(p[i].x<p[j].x){
                if(p[i].d[0]=='>') G[i].insert(make_pair(p[j].x-p[i].x,j));
                if(p[j].d[0]=='<') G[j].insert(make_pair(p[j].x-p[i].x,i));
            }
            else{
                if(p[i].d[0]=='<') G[i].insert(make_pair(p[i].x-p[j].x,j));
                if(p[j].d[0]=='>') G[j].insert(make_pair(p[i].x-p[j].x,i));
            }
        }
    }
    
    void dfs(int u){
        cnt++;
        vis[u]=1;
        if(G[u].empty()) return;
        set<pair<int,int> >::iterator it;
        for(it=G[u].begin();it!=G[u].end();it++) if(!vis[(*it).second]) break;
        if(it!=G[u].end()) dfs((*it).second);
    }
    
    int main(){
        int n;
        while(~scanf("%d",&n)){
            for(int i=0;i<n;i++) G[i].clear();
            for(int i=0;i<n;i++) scanf("%d%d%s",&p[i].x,&p[i].y,p[i].d);
            for(int i=0;i<n;i++)
            for(int j=0;j<i;j++) check(i,j);
            int ans=1;
            for(int i=0;i<n;i++){
                cnt=0;
                mems(vis,0);
                dfs(i);
                ans=max(ans,cnt);
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?
    Go语言基础之函数参数
    Go语言基础之函数定义
    Go语言基础之map
    Go语言基础之切片
    Go语言基础之数组
    Go中nil的定义
    复合数据类型介绍
    Go语言基础之流程控制goto
    Go语言基础之流程控制switch分支
  • 原文地址:https://www.cnblogs.com/luxiaoming/p/5276840.html
Copyright © 2020-2023  润新知