QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#318148#1193. Ambiguous Encodingc20230201WA 1ms4368kbC++141.5kb2024-01-30 16:26:002024-01-30 16:26:01

Judging History

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

  • [2024-01-30 16:26:01]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:4368kb
  • [2024-01-30 16:26:00]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll maxn=2e4, inf=1e18;

unordered_map<ll,ll> lg;

ll v[1005], id[1005][17], dis[maxn], vis[maxn];
string s[1005];
vector<pair<ll,ll> > g[maxn];

ll lowbit(ll x) {
	return x&(-x);
}

struct node {
	ll x;
	ll v;
	bool operator < (const node&other) const{
		return v>other.v;
	}
};

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	ll n,tot=0; cin>>n;
	for(ll i=1;i<=16;i++) lg[1<<i]=i;
	for(ll i=1;i<=n;i++) {
		cin>>s[i];
		for(ll j=0;j<s[i].size();j++) v[i]+=((s[i][j]-'0')<<j);
		for(ll j=0;j<=s[i].size();j++) id[i][j]=++tot;
	}
	for(ll i=1;i<=n;i++) {
		for(ll j=0;j<s[i].size();j++) {
			ll len=s[i].size()-j;
			ll val=(v[i]>>j);
			for(ll k=1;k<=n;k++) {
				if(k==i) continue;
				ll x=min(min(lg[lowbit(val^v[k])==0?(1<<16):lowbit(val^v[k])],len),(ll)s[k].size());
				if(x<len&&x<s[k].size()) continue;
				else if(x<len) g[id[i][j]].push_back({id[i][j+x],x});
				else g[id[i][j]].push_back({id[k][x],x});
			}
		}
	}
	priority_queue<node> q;
	for(ll i=1;i<=tot;i++) dis[i]=inf;
	for(ll i=1;i<=n;i++) dis[id[i][0]]=0, q.push((node){id[i][0],0});
	while(q.size()) {
		ll x=q.top().x; q.pop();
		if(vis[x]) continue;
		vis[x]=1;
		for(auto p:g[x]) {
			ll y=p.first, w=p.second;
			if(dis[y]>dis[x]+w) dis[y]=dis[x]+w, q.push((node){y,dis[y]});
		}
	}
	ll ans=inf;
	for(ll i=1;i<=n;i++) ans=min(ans,dis[id[i][s[i].size()]]);
	if(ans!=inf) cout<<ans<<'\n';
	else cout<<"0\n";
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 4072kb

input:

3
0
01
10

output:

3

result:

ok answer is '3'

Test #2:

score: 0
Accepted
time: 1ms
memory: 4108kb

input:

3
00
01
1

output:

0

result:

ok answer is '0'

Test #3:

score: 0
Accepted
time: 1ms
memory: 4132kb

input:

3
00
10
1

output:

0

result:

ok answer is '0'

Test #4:

score: 0
Accepted
time: 1ms
memory: 4088kb

input:

10
1001
1011
01000
00011
01011
1010
00100
10011
11110
0110

output:

13

result:

ok answer is '13'

Test #5:

score: 0
Accepted
time: 1ms
memory: 4368kb

input:

3
1101
1
10

output:

4

result:

ok answer is '4'

Test #6:

score: 0
Accepted
time: 1ms
memory: 4324kb

input:

100
1010011110001
00000100010101
011010100100001
11100001100011
10010001010
1110001110110011
01001100111
1010100110010100
00000100111010
100111001100101
0010000000010
0111110011100110
0100111000001
1100101111110001
1100100110001
10100011010
10100000011000
1111001111001110
000000000101011
10101111011...

output:

102

result:

ok answer is '102'

Test #7:

score: 0
Accepted
time: 1ms
memory: 4068kb

input:

10
0110
001100
0100
0001
100
001010
0010
100010
1100
11101

output:

10

result:

ok answer is '10'

Test #8:

score: -100
Wrong Answer
time: 1ms
memory: 4368kb

input:

10
1001
10111
11011
00010
001
001100
110
01110
111101
11100

output:

11

result:

wrong answer expected '10', found '11'