这几天状态一天比一天差……我究竟怎么了
今天撒谎说没作业 做了一个晚上一道题也没做出来。
抄题解是不对的啊。
今天通过的是洛谷上面的01迷宫(一个很简单的bfs+记忆化)以及子矩阵 NOIP2014普及组T4(大概是dp+搜索)
余数求和的原理仍然没看懂。
明明回家的时候状态还不错的啊
明天绝对不能这样了。
#include<iostream>//01迷宫
#include<cstdio>
using namespace std;
int n,m;
bool map[1005][10005];
char aa[100005];
int v[10005][10005];
int sum[10000101];
int q[5000001][2];
int t=0;
int dx[4]={-1,0,0,1};
int dy[4]={0,-1,1,0};
void bfs(int x,int y)
{
if(v[x][y]!=0)
{
printf("%d\n",sum[v[x][y]]);
return;
}
t++;
int head=0,tail=1,s=1;
q[0][0]=x;
q[0][1]=y;
v[x][y]=t;
while(head<tail)
{
int xx=q[head][0],yy=q[head][1];
for(int i=0;i<4;i++)
{
int xxx=xx+dx[i],yyy=yy+dy[i];
if(xxx>=1 && xxx<=n && yyy>=1 && yyy<=n)
{
if(map[xxx][yyy]!=map[xx][yy] && v[xxx][yyy]==0)
{
q[tail][0]=xxx;
q[tail][1]=yyy;
v[xxx][yyy]=t;
s++;
tail++;
}
}
}
head++;
}
printf("%d\n",s);
sum[t]=s;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",aa+1);
for(int j=1;j<=n;j++)
{
if(aa[j]=='1') map[i][j]=1;
if(aa[j]=='0') map[i][j]=0;
}
}
int a,b;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
bfs(a,b);
}
return 0;
}
子矩阵代码先不贴因为我没看懂。
我NOIP要爆炸了。
废物。