1. 程式人生 > >NOIP2018原創模擬賽DAY1 PION貪吃蛇

NOIP2018原創模擬賽DAY1 PION貪吃蛇

iostream etc 不可 tdi git 打了 如果 最短 原創

你以為我把這道題寫了嗎

不可能的,國服被卡王連最短路都寫掛了,這道題現在都沒寫出來

其實考場上是寫了的,但是掛了,最後到點了,心態炸裂,四千多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貪吃蛇