QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#807422#9802. Light Up the GridcodingforchineseRE 0ms0kbC++145.1kb2024-12-09 23:04:582024-12-09 23:04:59

Judging History

你现在查看的是最新测评结果

  • [2024-12-09 23:04:59]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2024-12-09 23:04:58]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int N=1000100;
const int inf=0x3f3f3f3f3f3f3f3f;

int m,cnt,a[N],dis[20][20],dp[20][100010];
int a0,a1,a2,a3;

void update(int i,int j,int d)
{
    dis[i][j]=min(dis[i][j],d);
    dis[i][j]=min(dis[j][i],d);
}
string s1;
string s2;
signed main()
{
    int T;
    cin>>T>>a0>>a1>>a2>>a3;
    int mi=min(a0,min(a1,min(a2,a3)));
    for(int i=0;i<16;i++)
    {
        for(int j=0;j<16;j++)
        {
            if(i!=j)dis[i][j]=inf;
            else dis[i][j]=mi*2;
        }
    }

    for(int i=0;i<16;i++)
    {
        update(i,i^1,a0);
        update(i,i^2,a0);
        update(i,i^4,a0);
        update(i,i^8,a0);

        update(i,i^12,a1);
        update(i,i^3,a1);
        update(i,i^10,a2);
        update(i,i^5,a2);
        
        update(i,i^15,a3);
    }
    for(int k=0;k<16;k++)
    {
        for(int i=0;i<16;i++)
        {
            for(int j=0;j<16;j++)
            {
                if(dis[i][j]>dis[i][k]+dis[k][j])
                {
                    dis[i][j]=dis[i][k]+dis[k][j];
                }
            }
        }
    }
    for(int i=0;i<16;i++)
    {
        for(int j=0;j<(1<<16);j++)
        {
            dp[i][j]=inf;
        }
    }
    dp[0][0]=0;
    for(int i=1;i<(1<<16);i++)
    {
        for(int j=0;j<16;j++)
        {
            if((i&(1<<j))!=0)
            {
                if(i==(1<<j))
                {
                    dp[i][j]=dis[j][0];
                    continue;
                }
                for(int k=0;k<16;k++)
                {
                    if(j==k)continue;

                    if((i&(1<<k))==0)continue;

                    if(dp[k][i^(1<<j)]>=inf)continue;

                    dp[j][i]=min(dp[j][i],dp[k][i^(1<<j)]+dis[k][j]);
                }
            }
        }
    }
    while(T--)
    {
        cin>>m;
        for(int i=1;i<=m;i++)
        {
            cin>>s1;
            cin>>s2;
            s1=" "+s1;
            s2=" "+s2;
            a[i]=(s1[1]-'0')*8+(s1[2]-'0')*4+(s2[1]-'0')*2+(s2[2]-'0');
            a[i]^=15;
        }
        int ed=0;
        for(int i=1;i<=m;i++)
        {
            ed+=(1<<a[i]);
        }
        int ans=inf;
        for(int i=1;i<=m;i++)
        {
            ans=min(ans,dp[a[i]][ed]);
        }
        cout<<ans<<"\n";
    }
}
// const int N=12;
// const int M=10*10;
// int n,m;
// int f[N][M][1<<N];
// vector<int>head[1<<N];

// vector<int>state;

// int cnt[1<<N];

// bool check(int s)
// {
//     for(int i=0;i<n;i++)
//     if((s>>i&1)&&(s>>i+1&1))return false;
//     return true;
// }
// void count(int s)
// {
//     for(int i=0;i<n;i++)
//     {
//         cnt[s]+=(s>>i&1);
//     }
// }
// signed main()
// {
//     cin>>n>>m;
//     for(int i=0;i<1<<n;i++)
//     {
//         if(check(i))
//         {
//             state.push_back(i);
//             count(i);
//         }
//     }
//     for(int i:state)
//     {
//         for(int j:state)
//         {
//             if((i&j)==0&&check(i|j))
//             {
//                 head[i].push_back(j);
//             }
//         }
//     }
//     f[0][0][0]=1;
//     for(int i=1;i<=n+1;i++)
//     {
//         for(int j=0;j<=m;j++)
//         {
//             for(int now:state)
//             {
//                 if(cnt[now]>j)continue;
//                 for(int pre:head[now])
//                 {
//                     f[i][j][now]+=f[i-1][j-cnt[now]][pre];
//                 }
//             }
//         }
//     }
//     cout<<f[n+1][m][0];
// }

// #define y1 Hi 
// const int N=21,inf=0x3f3f3f3f;

// int n,x1,y1,x2,y2;
// int f[2][65][N][N][N][N];

// int dx[]={-1,1,0,0};
// int dy[]={0,0,-1,1};

// int dfs(bool player,int cnt,int x1,int y1,int x2,int y2)
// {
//     if(~f[player][cnt][x1][y1][x2][y2])
//     {
//         return f[player][cnt][x1][y1][x2][y2];
//     }

//     if(cnt>3*n)
//     {
//         return f[player][cnt][x1][y1][x2][y2]=inf;
//     }
//     if(x1==x2&&y1==y2)
//     {
//         return f[player][cnt][x1][y1][x2][y2]=(player?0:inf);
//     }
//     int res;
//     if(player)
//     {
//         res=-1;
//         for(int i=0;i<4;i++)
//         {
//             int xx=x1+dx[i];
//             int yy=y1+dy[i];
//             if(xx<1||xx>n||yy<1||yy>n)continue;
//             res=max(res,dfs(0,cnt+1,xx,yy,x2,y2));
//         }
//     }
//     else 
//     {
//         res=inf;
//         for(int i=0;i<4;i++)
//         {
//             for(int j=1;j<=2;j++)
//             {
//                 int xx=x2+j*dx[i];
//                 int yy=y2+j*dy[i];
//                 if(xx<1||xx>n||yy<1||yy>n)continue;
//                 res=min(res,dfs(1,cnt+1,x1,y1,xx,yy));
//             }
//         }
//     }
//     return f[player][cnt][x1][y1][x2][y2]=res+1;
// }
// signed main()
// {
//     memset(f,-1,sizeof f);
//     cin>>n>>x1>>y1>>x2>>y2;
    
//     if(abs(x1-x2)+abs(y1-y2)==1)
//     cout<<"WHITE 1";
//     else cout<<"BLACK "<<dfs(1,0,x1,y1,x2,y2)<<"\n";
// }

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Runtime Error

input:

2 1000 100 10 1
4
10
00

01
00

00
10

00
01
1
11
11

output:


result: