NOIP2018原創模擬賽DAY1 PION貪吃蛇
阿新 • • 發佈:2018-09-24
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(constskr 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貪吃蛇