QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#788364#9802. Light Up the GridxbzxznWA 35ms26956kbC++202.2kb2024-11-27 16:42:132024-11-27 16:42:14

Judging History

你现在查看的是测评时间为 2024-11-27 16:42:14 的历史记录

  • [2024-11-29 22:56:51]
  • 管理员手动重测本题所有提交记录
  • 测评结果:WA
  • 用时:35ms
  • 内存:26720kb
  • [2024-11-27 16:42:14]
  • 评测
  • 测评结果:0
  • 用时:35ms
  • 内存:26956kb
  • [2024-11-27 16:42:13]
  • 提交

answer

#include<bits/stdc++.h>
#define int long long
#define Pa pair<int,int>
using namespace std;
const int inf=1e18;
signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int T;cin>>T;
    vector<int>a(5);
    for(int i=0;i<4;i++)cin>>a[i];
    vector<array<int,2>>e;
    e.push_back({a[0],1});
    e.push_back({a[0],2});
    e.push_back({a[0],4});
    e.push_back({a[0],8});
    e.push_back({a[1],3});
    e.push_back({a[1],12});
    e.push_back({a[2],10});
    e.push_back({a[2],5});
    e.push_back({a[3],15});
    int mx=16;
    vector<int>dis(mx+1,inf),vis(1<<(mx+1),0);
    dis[15]=0;
    priority_queue<array<int,2>,vector<array<int,2>>,greater<array<int,2>>>q;
    q.push({dis[15],15});
    while(!q.empty()){
        auto [_,u]=q.top();q.pop();
        if(vis[u])continue;
        vis[u]=1;
        for(auto[val,nxt]:e){
            int v=u^nxt;
            if(dis[v]>dis[u]+val){
                dis[v]=dis[u]+val;
                q.push({dis[v],v});
            }
        }
    }
    dis[15]=inf;
    for(int i=0;i<=15;i++){
        dis[15]=min(dis[15],dis[i]*2ll);
    }
    int mn=inf;
    for(int i=0;i<4;i++)mn=min(mn,2*a[i]);
    for(int i=0;i<(1ll<<(mx+1));i++)vis[i]=0;
    vector<vector<int>>dp(1<<(mx+1),vector<int>(16,inf));
    vector<int>pre(1<<(mx+1),0);
    for(int i=1;i<=15;i++){
        dp[1<<i][i]=dis[i];
    }
    q.push({0,0});
    int maxn=0,mx2=0;int id=0;
    for(int i=1;i<(1ll<<mx);i++){
        for(int j=1;j<=15;j++){
            if((i>>j)&1){
                int cur=i^(1<<j);
                for(int k=1;k<=15;k++){
                    if((cur>>k)&1){
                        dp[i][j]=min(dp[i][j],dp[cur][k]+dis[k^15^j]);
                    }
                }
            }
        }
    }
    while(T--){
        int n;cin>>n;
        vector<int>b(n);
        int res=0;
        for(int i=0;i<n;i++){
            string s;cin>>s;
            b[i]=(s[0]-'0')*8;
            b[i]+=(s[1]-'0')*4;
            cin>>s;
            b[i]+=(s[0]-'0')*2;
            b[i]+=(s[1]-'0');
            res|=(1ll<<b[i]);
        }
        int ans=inf;
        for(int i=1;i<=15;i++){
            ans=min(ans,dp[res][i]);
        }
        cout<<ans<<'\n';
    }
}

详细

Test #1:

score: 100
Accepted
time: 29ms
memory: 26592kb

input:

2 1000 100 10 1
4
10
00

01
00

00
10

00
01
1
11
11

output:

1121
2

result:

ok 2 number(s): "1121 2"

Test #2:

score: 0
Accepted
time: 25ms
memory: 26888kb

input:

2 1 1 1 1
4
10
00

01
00

00
10

00
01
1
11
11

output:

5
2

result:

ok 2 number(s): "5 2"

Test #3:

score: 0
Accepted
time: 26ms
memory: 26956kb

input:

1 1000000 1000000 1000000 1000000
1
11
11

output:

2000000

result:

ok 1 number(s): "2000000"

Test #4:

score: -100
Wrong Answer
time: 35ms
memory: 26892kb

input:

10000 8 2 7 8
8
00
01

00
11

00
10

11
11

10
10

01
10

01
00

10
11
8
11
01

11
00

01
10

11
11

00
01

01
01

01
00

11
10
9
00
00

01
01

10
11

00
01

11
10

11
00

11
11

00
11

01
10
9
11
11

10
00

11
00

11
01

00
10

01
11

00
01

01
01

10
01
11
00
01

01
01

10
10

00
11

11
11

11
10
...

output:

34
32
1000000000000000000
36
40
36
1000000000000000000
38
40
1000000000000000000
1000000000000000000
1000000000000000000
34
1000000000000000000
1000000000000000000
32
1000000000000000000
1000000000000000000
39
40
38
1000000000000000000
1000000000000000000
37
1000000000000000000
1000000000000000000
3...

result:

wrong answer 3rd numbers differ - expected: '36', found: '1000000000000000000'