10.23刷题记录

来源:互联网 发布:php 开源社区系统 编辑:程序博客网 时间:2024/05/19 22:24

这几天状态一天比一天差……我究竟怎么了
今天撒谎说没作业 做了一个晚上一道题也没做出来。
抄题解是不对的啊。
今天通过的是洛谷上面的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要爆炸了。
废物。

原创粉丝点击