2 条题解
-
0
#include<bits/stdc++.h> using namespace std; int dx[4]={-1,1,0,0}; int dy[4]={0,0,1,-1}; struct node{int x,y,t;};//x、y表示当前燃烧的位置,t表示当前位置开始燃烧的时间 int a[1100][1100],s[1110000],n,m; //s数组是重点技巧,具体参考题目1670《幼儿园分糖果》的a数组。 bool v[1100][1100]; int main() { scanf("%d%d",&n,&m); memset(v,0,sizeof(v)); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]),v[i][j]=a[i][j]; int stx,sty;scanf("%d%d",&stx,&sty);if(a[stx][sty]==0)return 0; memset(s,0,sizeof(s));s[1]++;s[1+a[stx][sty]]--; int maxt=a[stx][sty];//记录整个地图最后一根火柴燃烧结束的时间,一开始为出发格子的燃烧结束时间 deque<node> Q;Q.push_back(node{stx,sty,1}); v[stx][sty]=0; while(!Q.empty()) { for(int i=0;i<=3;i++) { node no=Q.front(); no.x+=dx[i],no.y+=dy[i]; if(no.x>=1&&no.x<=n&&no.y>=1&&no.y<=m) if(v[no.x][no.y]==1) { no.t++; v[no.x][no.y]=0; Q.push_back(no); s[no.t]++;s[no.t+a[no.x][no.y]]--; maxt=max(maxt,no.t+a[no.x][no.y]-1); } } Q.pop_front(); } for(int i=1;i<=maxt;i++)s[i]=s[i-1]+s[i],printf("%d\n",s[i]); return 0; } -
0
<br />
#include<bits/stdc++.h> using namespace std; int dx[4]={-1,1,0,0}; int dy[4]={0,0,1,-1}; struct node{int x,y,t;};//x、y表示当前燃烧的位置,t表示当前位置开始燃烧的时间 int a[1100][1100],s[1110000],n,m; //s数组是重点技巧,具体参考题目1670《幼儿园分糖果》的a数组。 bool v[1100][1100]; int main() { scanf("%d%d",&n,&m); memset(v,0,sizeof(v)); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]),v[i][j]=a[i][j]; int stx,sty;scanf("%d%d",&stx,&sty);if(a[stx][sty]==0)return 0; memset(s,0,sizeof(s));s[1]++;s[1+a[stx][sty]]--; int maxt=a[stx][sty];//记录整个地图最后一根火柴燃烧结束的时间,一开始为出发格子的燃烧结束时间 deque<node> Q;Q.push_back(node{stx,sty,1}); v[stx][sty]=0; while(!Q.empty()) { for(int i=0;i<=3;i++) { node no=Q.front(); no.x+=dx[i],no.y+=dy[i]; if(no.x>=1&&no.x<=n&&no.y>=1&&no.y<=m) if(v[no.x][no.y]==1) { no.t++; v[no.x][no.y]=0; Q.push_back(no); s[no.t]++;s[no.t+a[no.x][no.y]]--; maxt=max(maxt,no.t+a[no.x][no.y]-1); } } Q.pop_front(); } for(int i=1;i<=maxt;i++)s[i]=s[i-1]+s[i],printf("%d\n",s[i]); return 0; }
<br />
<br />
- 1
信息
- ID
- 699
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 31
- 已通过
- 15
- 上传者