zoukankan      html  css  js  c++  java
  • NOIP2018原创模拟赛DAY1 PION贪吃蛇

    你以为我把这道题写了吗

    不可能的,国服被卡王连最短路都写挂了,这道题现在都没写出来

    其实考场上是写了的,但是挂了,最后到点了,心态炸裂,四千多b呀(流泪)

    一起打比赛的哥们在我写题的时候打了三把炉石,还写了一篇作文(

    然后你问我没调出来写什么博客,我表示

    “一家人就是要整整齐齐”

    下面附上我连样例都过不了的代码(仅供娱乐,抄袭OK):

    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    inline int min(int a,int b){return a<b?a:b;}
    inline int max(int a,int b){return a>b?a:b;}
    inline int rd()
    {
        int x=0,f=1;
        char c=getchar();
        for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
        for(;isdigit(c);c=getchar()) x=x*10+c-'0';
        return x*f;
    }
    inline void write(int x)
    {
         if(x<0) putchar('-'),x=-x;
         if(x>9) write(x/10);
         putchar(x%10+'0');
    }
    int n,m,k;
    int cnt=0;
    char map[1006][1006];
    struct node{
        int s1,s2;
    }head[100006];
    char s[1006][1006];
    struct skr{
        int len,c;
    }ans[100006];
    bool cmp(const skr x,const skr y){
        if(x.len==y.len) return x.c<y.c;
        return x.len>y.len;
    }
    void die(int x,int y){
        if(map[x-1][y]=='#'){
            map[x-1][y]='&';
            die(x-1,y);
        }
        if(map[x][y-1]=='#'){
            map[x][y-1]='&';
            die(x,y-1);
        }
        if(map[x+1][y]=='#'){
            map[x+1][y]='&';
            die(x+1,y);
        }
        if(map[x][y+1]=='#'){
            map[x][y+1]='&';
            die(x,y+1);
        }
        return ;
    }
    int vis[206][206];
    int num=0;
    int getl(int x,int y){
        vis[x][y]=1;
        num++;
        if(!vis[x-1][y]&&map[x-1][y]=='#') getl(x-1,y);
        if(!vis[x][y-1]&&map[x][y-1]=='#') getl(x,y-1);
        if(!vis[x+1][y]&&map[x+1][y]=='#') getl(x+1,y);
        if(!vis[x][y+1]&&map[x][y+1]=='#') getl(x,y+1);
        return num;
    }
    void move(int x,int y,int lx,int ly){
        vis[x][y]=1;
        if(lx==x-1){
            if(map[x+1][y]!='#'&&map[x][y-1]!='#'&&map[x][y+1]!='#'){
                map[x][y]='.';
                return ;
            }
        }
        if(lx==x+1){
            if(map[x-1][y]!='#'&&map[x][y-1]!='#'&&map[x][y+1]!='#'){
                map[x][y]='.';
                return ;
            }
        }
        if(ly==y-1){
            if(map[x+1][y]!='#'&&map[x-1][y]!='#'&&map[x][y+1]!='#'){
                map[x][y]='.';
                return ;
            }
        }
        if(ly==y+1){
            if(map[x+1][y]!='#'&&map[x][y-1]!='#'&&map[x-1][y]!='#'){
                map[x][y]='.';
                return ;
            }
        }
        if(map[x-1][y]=='#'&&!vis[x-1][y]){
            move(x-1,y,x,y);
        }
        if(map[x][y-1]=='#'&&!vis[x][y-1]){
            move(x,y-1,x,y);
        }
        if(map[x+1][y]=='#'&&!vis[x+1][y]){
            move(x+1,y,x,y);
        }
        if(map[x][y+1]=='#'&&!vis[x][y+1]){
            move(x,y+1,x,y);
        }
        return ;
    }
    void solve(char x,int y,int z){
        memset(vis,0,sizeof(vis));
        int i=head[y].s1,j=head[y].s2;
        if(x=='W'){
            if(map[i-1][j]=='&'){
                map[i-1][j]='@';
                ans[z].len++;
                map[i][j]='#';
            }
            if(map[i-1][j]=='#'||map[i-1][j]=='@'||i-1<1){
                map[i][j]='&';
                ans[z].len=0;
                die(i,j);
            }
            if(map[i-1][j]=='.'){
                map[i-1][j]='@';
                map[i][j]='#';
                move(i,j,i-1,j);
            }
        }
        if(x=='S'){
            if(map[i+1][j]=='&'){
                ans[z].len++;
                map[i+1][j]='@';
                map[i][j]='#';
            }
            if(map[i+1][j]=='#'||map[i-1][j]=='@'||i+1>n){
                map[i][j]='&';
                ans[z].len=0;
                die(i,j);
            }
            if(map[i+1][j]=='.'){
                map[i+1][j]='@';
                map[i][j]='#';
                move(i,j,i+1,j);
            }
        }
        if(x=='A'){
            if(map[i][j-1]=='&'){
                ans[z].len++;
                map[i][j-1]='@';
                map[i][j]='#';
            }
            if(map[i][j-1]=='#'||map[i][j-1]=='@'||j-1<1){
                map[i][j]='&';
                ans[z].len=0;
                die(i,j);
            }
            if(map[i][j-1]=='.'){
                map[i][j-1]='@';
                map[i][j]='#';
                move(i,j,i,j-1);
            }
        }
        if(x=='D'){
            if(map[i][j+1]=='&'){
                ans[z].len++;
                map[i][j+1]='@';
                map[i][j]='#';
            }
            if(map[i][j+1]=='#'||map[i][j+1]=='@'||j+1>m){
                map[i][j]='&';
                ans[z].len=0;
                die(i,j);
            }
            if(map[i][j+1]=='.'){
                map[i][j+1]='@';
                map[i][j]='#';
                move(i,j,i,j+1);
            }
        }
        return ;
    }
    int main()
    {
        /*
        如果你没有看完上面的话,还想把代码拷走,你可真是倒了八辈子血霉了 
        手动滑稽 
        */
        n=rd();
        m=rd();
        k=rd();
        for(int i=1;i<=n;i++){
            /*for(int j=1;j<=m;j++){
                map[i][j]=getchar();
                if(map[i][j]=='@') cnt++;
            }*/
            scanf("%s",map[i]+1);
            for(int j=1;j<=m;j++){
                if(map[i][j]=='@'){
                    cnt++;
                    head[cnt].s1=i;
                    head[cnt].s2=j;
                    ans[cnt].c=cnt;
                }
            }
        }
        for(int i=1;i<=cnt;i++){
            num=0;
            memset(vis,0,sizeof(vis));
            ans[i].len=getl(head[i].s1,head[i].s2);
        }
        for(int i=1;i<=cnt;i++){
            scanf("%s",s[i]+1);
        }
        for(int i=1;i<=k;i++){
            for(int j=1;j<=cnt;j++){
                char h=s[j][i];
                solve(h,j,j);
                /*cout<<endl;
                for(int i=1;i<=n;i++){
                    for(int j=1;j<=m;j++){
                       cout<<map[i][j];
                     }
                     cout<<endl;
                }*/
            }
            
        }
        sort(ans+1,ans+cnt+1,cmp);
        for(int i=1;i<=cnt;i++){
            printf("%d %d
    ",ans[i].len,ans[i].c);
        }
        int sum=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(map[i][j]=='&'){
                    sum++;
                }
            }
        }
        printf("%d",sum);
        return 0;
    }
    蒟蒻总是更懂你✿✿ヽ(°▽°)ノ✿
  • 相关阅读:
    17 applyMiddleware MainMiddleWare, redux-thunk , createStore
    16 redux简介
    15 react-redux provider组件
    14 React Refs
    13 React 表单与事件
    12 React AJAX
    Vue3 getCurrentInstance与ts结合使用的问题
    Vue3 更改setup中定义的值不渲染到视图上【Vue2.x向Vue3.x的迁移(踩坑)日记】
    Vue3 中组件传值emit【Vue2.x向Vue3.x的迁移日记】
    vue js 模糊匹配搜索查询
  • 原文地址:https://www.cnblogs.com/WWHHTT/p/9696435.html
Copyright © 2011-2022 走看看