怎么知道mac电脑上装了哪几个python版本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么知道mac电脑上装了哪几个python版本相关的知识,希望对你有一定的参考价值。
可以用pyenv versions 命令查看安装了哪些版本的python 另外,pyenv version可以看当前激活使用的是哪个版本的python 。两个命令少个s 的,注意下。 参考技术A 直接用python命令就可以查找出来HDOJ-2896(AC自动机+文本串中出现了哪几个模板串)
病毒侵袭
HDOJ-2896
- 主要使用AC自动机解决,其次在query函数中改变一下,用来记录每个模板串出现的次数,还有insert函数中记录模板串的编号
- 需要注意最好使用结构体,而且不能一次性使用memset否则会超时
- 上次没有AC出现了output limit exceed问题,后来发现是我的num数组开的太小了,只开了505,实际上需要N的空间。
- 还有一个问题就是我以前提交的时候很容易就MLE,内存超限,直到我把AC自动机封存到一个结构体中,而且并不是一开始就使用memsettrie树上的结点,而是在建树的时候建一个结点就memset一个结点,这样节省空间。
//AC自动机,复杂度为O(|t|+m),t表示文本串的长度,m表示模板串的个数
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<set>
using namespace std;
const int N=56600;
int n;
string s[502];
set<int>::iterator it;
string t;
struct ACM
int tree[N][128];//trie树上的结点,tree[i][j]表示i结点后面加一条j的边所对应的的结点
int total;//总结点
int num[N];//num[i]表示结点i上对应的模板串的编号
int fail[N];//失配指针,fail[i]指向所有模板串的前缀中匹配当前状态的最长后缀,指向的是最长后缀(和当前状态的后缀是匹配的,即相同,不过要最长)
int val[N];//val[j]表示结点j所对应的模板串在文本串中出现的次数
set<int> se;
queue<int> q;
void init()
total=0;
val[0]=fail[0]=num[0]=0;
memset(tree[0],0,sizeof(tree[0]));
int idx(char c)//用来求字符c对应的编号(0-25)
return c-0;
void insert(string s,int id)//类似于后缀树的插入一个模板串.id表示所有模板串中该模板串的编号
int u=0;
for(int i=0;i<s.length();i++)
if(!tree[u][idx(s[i])])
tree[u][idx(s[i])]=++total;
memset(tree[total],0,sizeof(0));
u=tree[u][idx(s[i])];
num[u]=id;
void build()//建AC自动机以及fail数组
for(int i=0;i<128;i++)
if(tree[0][i])
q.push(tree[0][i]);
fail[tree[0][i]]=0;
while(!q.empty())
int u=q.front();
q.pop();
for(int i=0;i<128;i++)
if(tree[u][i])//如果结点u连的边为i对应的结点存在,则将这个存在的结点的fail指针指向父节点失配指针指向的结点的连的边为i所对应的的结点
fail[tree[u][i]]=tree[fail[u]][i];
q.push(tree[u][i]);
else//类似于状态压缩,不至于每次fail指针跳转很多次,只需每次跳转一次,相当于构建了图
tree[u][i]=tree[fail[u]][i];
void query(string t)//s为要查找的文本串
se.clear();
int u=0;
int res=0;//记录答案,所有的模板串共出现了多少次
for(int i=0;i<t.length();i++)
u=tree[u][idx(t[i])];
for(int j=u;j>0;)
val[j]++;
j=fail[j];
for(int i=0;i<=total;i++)//注意:这里是i<=total ,而不是<total,否则报错
if(num[i])//如果i结点对应着一个模板串,该模板串编号为num[i].
if(val[i]>0)
se.insert(num[i]);//模板串对应的编号插入set中
val[i]=0;
//return res;
;
ACM ac;
int main()
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
ac.init();
for(int i=1;i<=n;i++)
cin>>s[i];
ac.insert(s[i],i);
ac.build();
int m;
cin>>m;
int ans=0;
for(int i=1;i<=m;i++)
cin>>t;
//memset(val,0,sizeof(val));
ac.query(t);
int size=ac.se.size();
if(size>0)
//cout<<se.size()<<endl;
ans++;
cout<<"web "<<i<<":";
int cnt=0;
for(it=ac.se.begin();it!=ac.se.end();it++)
cout<<" "<<*it;
cout<<endl;
cout<<"total: "<<ans<<endl;
//system("pause");
return 0;
以上是关于怎么知道mac电脑上装了哪几个python版本的主要内容,如果未能解决你的问题,请参考以下文章
谁可以教我怎么在mac OXS 10.7.2 上装prolog?
HDOJ-2896(AC自动机+文本串中出现了哪几个模板串)