Logo dfdf_maoshenxing的博客

博客

求救!!!!!!!!!!!!!!!!!!!

2023-12-17 17:19:02 By dfdf_maoshenxing

救救我!!!!

我已经调过 $ 10^9 $ 天的程序了

那啥吃豆子仍然报单......

代码奉上

#include<bits/stdc++.h>
using namespace std;
int n;
int m;
int d;
struct node
{
    int x;
    int y;
    int sta;
}bean[15];
int b[15];
char Map[15][15];
int dis[15][15][1025];
int dam[1025];
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
bool iq[15][15][1025];
queue<node> q;
int ans;
void spfa(int sx, int sy)
{
    memset(dis,0x3f,sizeof(dis));
    q.push((node){sx,sy,0});
    iq[sx][sy][0] = 1;
    dis[sx][sy][0] = 0;
    while(!q.empty())
    {
        int ux = q.front().x;
        int uy = q.front().y;
        int Sta = q.front().sta;
        q.pop();
        iq[ux][uy][Sta] = 0;
        for(int i = 0; i<4; i++)
        {
            int vx = ux+dx[i];
            int vy = ux+dy[i];
            int S = Sta;
            if(vx<1 || vx>n || vy<1 || vy>m || Map[vx][vy] != '0')
            {
                continue;
            }
            if(i>1)
            {
                for(int j = 1; j<=d; j++)
                {
                    if((bean[j].x == ux && ux>vx || bean[j].x == vx && vx>ux) && bean[j].y<uy)
                    {
                        S^=(1<<j-1);
                    }
                }
            }
            if(dis[ux][uy][Sta] + 1 < dis[vx][vy][S])
            {
                dis[vx][vy][S]=dis[ux][uy][Sta]+1;
                if(!iq[vx][vy][S])
                {
                    q.push((node){vx,vy,S});
                    iq[vx][vy][S] = 1;
                }
            }
        }
    }
    for(int i = 0; i<=(1<<d); i++)
    {
        ans = max(ans,dam[i]-dis[sx][sy][i]);
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin>>n>>m;
    cin>>d;
    for(int i = 1; i<=d; i++)
    {
        cin>>b[i];
    }
    for(int i = 1; i<=n; i++)
    {
        for(int j = 1; j<=m; j++)
        {
            cin>>Map[i][j];
        }
    }
    for(int i = 1; i<=(1<<d); i++)
    {
        for(int j = 1; j<=d; j++)
        {
            if(i&(1<<j-1))
            {
                dam[i]+=b[j];
            }
        }
    }
    for(int i = 1; i<=n; i++)
    {
        for(int j = 1; j<=m; j++)
        {
            if(Map[i][j]>='1' && Map[i][j]<='9')
            {
                bean[Map[i][j]-'0'].x = i;
                bean[Map[i][j]-'0'].y = j;
            }
        }
    }
    for(int i = 1; i<=n; i++)
    {
        for(int j = 1; j<=m; j++)
        {
            if(Map[i][j] == '0')
            {
                spfa(i,j);
            }
        }
    }
    cout<<ans;
    return 0;
}

评论

syyx_zhangshihao
nnnneng ffffffaaaa pppiinng llllllluuun lllllllleeee
syyx_zhangshihao
tei bang le
ljxx_chuxinan
存代码ing #include<bits/stdc++.h> using namespace std; char ss[100005]; int nd[100005],n,tot,ans[100005],c[100005],dfn[100005],low[100005],tim,ql[100005],qr[100005]; struct Node{ int vis[26]; int Vis[26],fail,fa,lt; }t[100005]; struct Question{ int x,y,id,ans; }q[100005]; bool operator<(Question a,Question b){ return a.y<b.y; } int read(){ int x=0,t=1;char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=-1,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return x*t; } int lowbit(int x){ return x&(-x); } void Modify(int x,int w){ while(x<=tim)c[x]+=w,x+=lowbit(x); } int getsum(int x){ int ret=0; while(x)ret+=c[x],x-=lowbit(x); return ret; }
ljxx_chuxinan
void GetFail(){ queue<int> Q; for(int i=0;i<26;++i) if(t[0].vis[i])Q.push(t[0].vis[i]); while(!Q.empty()){ int u=Q.front();Q.pop(); for(int i=0;i<26;++i) if(t[u].vis[i]) t[t[u].vis[i]].fail=t[t[u].fail].vis[i],Q.push(t[u].vis[i]); else t[u].vis[i]=t[t[u].fail].vis[i]; } } struct Line{ int v,next; }e[100005*2]; int h[100005],cnt=1; void Add(int u,int v){ e[cnt]=(Line){v,h[u]}; h[u]=cnt++; } void dfs(int u){ dfn[u]=++tim; for(int i=h[u];i;i=e[i].next)dfs(e[i].v); low[u]=tim; } void DFS(int u){ Modify(dfn[u],1); if(t[u].lt) for(int i=ql[t[u].lt];i<=qr[t[u].lt];i++) q[i].ans=getsum(low[nd[q[i].x]])-getsum(dfn[nd[q[i].x]]-1); for(int i=0;i<26;++i) if(t[u].Vis[i]) DFS(t[u].Vis[i]); Modify(dfn[u],-1); }
ljxx_chuxinan
int main(){ scanf("%s",ss+1); int now=0; for(int i=1,l=strlen(ss+1);i<=l;i++){ if(ss[i]>='a'&&ss[i]<='z'){ if(!t[now].vis[ss[i]-'a'])t[now].vis[ss[i]-'a']=++tot,t[tot].fa=now; now=t[now].vis[ss[i]-'a']; } if(ss[i]=='B')now=t[now].fa; if(ss[i]=='P'){ nd[++n]=now; t[now].lt=n; } } for(int i=0;i<=tot;i++) for(int j=0;j<26;j++) t[i].Vis[j]=t[i].vis[j]; int Q=read(); GetFail(); for(int i=1;i<=tot;++i)Add(t[i].fail,i); dfs(0); for(int i=1;i<=Q;i++){ q[i].x=read(); q[i].y=read(); q[i].id=i; } sort(&q[1],&q[Q+1]); for(int i=1,pos=1;i<=Q;i=pos){ ql[q[i].y]=i; while(q[pos].y==q[i].y)pos++; qr[q[i].y]=pos-1; } DFS(0); for(int i=1;i<=Q;++i)ans[q[i].id]=q[i].ans; for(int i=1;i<=Q;++i) printf("%d\n",ans[i]); return 0; }
syyx_zhangshihao
看 “网络/yyzx-3/快看”
syyx_zhangshihao
@dfdf_xuziye
syyx_zhangshihao
@dfdf_maoshenxing
syyx_zhangshihao
@smzx_chenzhiyu
syyx_zhangshihao
@dfdf_maoshenxing
syyx_zhangshihao
看 “网络/yyzx-3/快看” @dfdf_xuziye @dfdf_maoshenxing @smzx_chenzhiyu
syex_wuhao
hi
syex_Baozihan
@