QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#318271 | #1193. Ambiguous Encoding | wullaaa | WA | 1ms | 5928kb | C++14 | 1.4kb | 2024-01-30 21:43:05 | 2024-01-30 21:43:06 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5,INF=1e9,M=16e6+5;
int n,len[N],a[N],cnt,dis[M],id[N][15],ed;
char s[20];
struct node{
int i,j,val;
bool operator< (const node &other)const{
return val>other.val;
}
};
priority_queue<node> q;
bool vis[M];
int main(){
scanf("%d",&n),ed=cnt=1;
for(int i=1;i<=n;++i){
scanf("%s",s+1),len[i]=strlen(s+1);
for(int j=0;j<len[i];++j) id[i][j]=++cnt;
id[i][len[i]]=ed;
for(int j=1;j<=len[i];++j) a[i]=a[i]<<1|(s[j]-'0');
}
for(int i=1;i<=cnt;++i) dis[i]=INF;
for(int i=1;i<=n;++i) q.push({i,0,dis[id[i][0]]=len[i]});
while(!q.empty()){
int i=q.top().i,j=q.top().j,x=id[i][j]; q.pop();
if(vis[x]) continue; vis[x]=true;
for(int k=1;k<=n;++k) if((i^k)||j){
if(len[k]<=len[i]-j){
if(a[k]==((a[i]>>(len[i]-j-len[k]))&((1<<len[k])-1))&&dis[id[i][j+len[k]]]>dis[x])
dis[id[i][j+len[k]]]=dis[x],q.push({i,j+len[k],dis[x]+len[k]});
}else{
if((a[i]&((1<<len[i]-j)-1))==(a[k]>>len[k]-len[i]+j)&&dis[id[k][len[i]-j]]>dis[x]+len[k]-len[i]+j)
dis[id[k][len[i]-j]]=dis[x]+len[k]-len[i]+j,q.push({k,len[i]-j,dis[id[k][len[i]-j]]});
}
}
}
if(vis[ed]) printf("%d",dis[ed]);
else puts("0");
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 5848kb
input:
3 0 01 10
output:
3
result:
ok answer is '3'
Test #2:
score: 0
Accepted
time: 1ms
memory: 5684kb
input:
3 00 01 1
output:
0
result:
ok answer is '0'
Test #3:
score: 0
Accepted
time: 0ms
memory: 5800kb
input:
3 00 10 1
output:
0
result:
ok answer is '0'
Test #4:
score: 0
Accepted
time: 0ms
memory: 5908kb
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: 5928kb
input:
3 1101 1 10
output:
4
result:
ok answer is '4'
Test #6:
score: -100
Wrong Answer
time: 1ms
memory: 5868kb
input:
100 1010011110001 00000100010101 011010100100001 11100001100011 10010001010 1110001110110011 01001100111 1010100110010100 00000100111010 100111001100101 0010000000010 0111110011100110 0100111000001 1100101111110001 1100100110001 10100011010 10100000011000 1111001111001110 000000000101011 10101111011...
output:
0
result:
wrong answer expected '102', found '0'