首页 > 其他 > 详细

NOIP2018原创模拟赛DAY1 PION贪吃蛇

时间:2018-09-24 20:47:09      阅读:170      评论:0      收藏:0      [点我收藏+]

你以为我把这道题写了吗

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

其实考场上是写了的,但是挂了,最后到点了,心态炸裂,四千多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\n",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;
}

 

NOIP2018原创模拟赛DAY1 PION贪吃蛇

原文:https://www.cnblogs.com/WWHHTT/p/9696435.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!