T1 IMMEDIATE DECODABILITY poj 1056

题目大意:

一些数字串 求是否存在一个串是另一个串的前缀

思路:

对于所有串经过的点权+1 如果一个点的end被访问过或经过一个被标记为end的点 就存在

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<algorithm>
 7 #include<vector>
 8 #include<queue>
 9 #include<set>
10 #define inf 2139062143
11 #define ll long long
12 #define MAXN 15100
13 using namespace std;
14 inline int read()
15 {
16     int x=0,f=1;char ch=getchar();
17     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
18     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
19     return x*f;
20 }
21 int n,tr[100][2],T,ans,vis[MAXN],sz,end[MAXN];
22 char ch[15];
23 void ins(char *c,int len)
24 {
25     int pos=0;
26     for(int i=0;i<len;i++)
27     {
28         if(!tr[pos][c[i]-'0']) tr[pos][c[i]-'0']=++sz;
29         pos=tr[pos][c[i]-'0'],vis[pos]++;
30         if(end[pos]) ans=1;
31     }
32     if(vis[pos]>1) ans=1;end[pos]=1;
33 }
34 int main()
35 {
36     while(scanf("%s",ch)!=EOF)
37     {
38         ans=sz=0;memset(vis,0,sizeof(vis));
39         memset(tr,0,sizeof(tr));memset(end,0,sizeof(end));
40         while(ch[0]!='9'){ins(ch,strlen(ch));scanf("%s",ch);}
41         if(!ans) printf("Set %d is immediately decodable\n",++T);
42         else printf("Set %d is not immediately decodable\n",++T);
43     }
44 }
View Code

相关文章:

  • 2022-01-03
  • 2022-01-02
  • 2022-03-01
  • 2021-08-15
  • 2022-02-11
  • 2021-11-29
猜你喜欢
  • 2021-10-31
  • 2021-05-13
  • 2021-04-18
  • 2021-04-07
  • 2021-04-08
  • 2021-09-15
相关资源
相似解决方案