#include<bits/stdc++.h>usingnamespace std;constint maxn =1e6+5;int ch[maxn][30], fa[maxn], End[maxn];int cnt =0, n;intget_num(char c){return c -'a';}voidbuild(string s){int cur =0, len = s.length();for(int i =0; i < len; i++){int c =get_num(s[i]);if(!ch[cur][c]) ch[cur][c]=++cnt;cur = ch[cur][c];}End[cur]++;}voidget_fail(){queue<int> q;for(int i =0; i <26; i++)if(ch[0][i])q.push(ch[0][i]);while(!q.empty()){int u = q.front(); q.pop();for(int i =0; i <26; i++){int&v = ch[u][i];if(v){fa[v]=ch[fa[u]][i];q.push(v);}else v = ch[fa[u]][i];}}}intquery(string s){int cur =0, ans =0, len = s.length();for(int i =0; i < len; i++){int c =get_num(s[i]);cur = ch[cur][c];for(int j = cur; j && End[j]!=-1; j = fa[j]){ans += End[j]; End[j]=-1;}}return ans;}intmain(){ string s;cin >> n;for(int i =0; i < n; i++){cin >> s;build(s);}get_fail(); cin >> s;cout <<query(s)<< endl;return0;}
洛谷P3796
#include<bits/stdc++.h>usingnamespace std;constint maxn =1e6+5;int ch[maxn][30], fa[maxn], End[maxn], ans[158], Maxs;int cnt =0, n;
string str[158];intget_num(char c){return c -'a';}voidbuild(string s,int x){int cur =0, len = s.length();for(int i =0; i < len; i++){int c =get_num(s[i]);if(!ch[cur][c]) ch[cur][c]=++cnt;cur = ch[cur][c];}End[cur]= x;}voidget_fail(){queue<int> q;for(int i =0; i <26; i++)if(ch[0][i])q.push(ch[0][i]);while(!q.empty()){int u = q.front(); q.pop();for(int i =0; i <26; i++){int&v = ch[u][i];if(v){fa[v]=ch[fa[u]][i];q.push(v);}else v = ch[fa[u]][i];}}}voidquery(string s){int cur =0, len = s.length();for(int i =0; i < len; i++){int c =get_num(s[i]);cur = ch[cur][c];for(int j = cur; j; j = fa[j])if(End[j]){ans[End[j]]++; Maxs =max(Maxs, ans[End[j]]);}}}intmain(){string s;while(cin >> n && n){for(int i =0; i <= cnt; i++){for(int j =0; j <26; j++)ch[i][j]=0;fa[i]=0; End[i]=0;}memset(ans,0,sizeof(ans)); Maxs =0;cnt =0;for(int i =1; i <= n; i++){cin >> str[i];build(str[i], i);}get_fail(); cin >> s;query(s);cout << Maxs << endl;for(int i =1; i <= n; i++)if(ans[i]== Maxs)cout << str[i]<< endl;}return0;}
luogu p5357
#include<bits/stdc++.h>usingnamespace std;constint maxn =2e6+6, maxm =2e5+6;int ch[maxn][30], fa[maxn], End[maxn], ans[maxm], Map[maxn], In[maxn];int cnt =0, n;int pos[maxn];intget_num(char c){return c -'a';}voidbuild(string s,int x){int cur =0, len = s.length();for(int i =0; i < len; i++){int c =get_num(s[i]);if(!ch[cur][c]) ch[cur][c]=++cnt;cur = ch[cur][c];}// if(!End[cur])End[cur] = x;// Map[x] = End[cur]; pos[x]= cur;//new}voidget_fail(){queue<int> q;for(int i =0; i <26; i++)if(ch[0][i])q.push(ch[0][i]);while(!q.empty()){int u = q.front(); q.pop();for(int i =0; i <26; i++){int&v = ch[u][i];if(v){fa[v]=ch[fa[u]][i]; In[ch[fa[u]][i]]++;//新加q.push(v);}else v = ch[fa[u]][i];}}}voidquery(string s){int cur =0, len = s.length();for(int i =0; i < len; i++){int c =get_num(s[i]);cur = ch[cur][c];// for(int j = cur; j; j = fa[j])// if(End[j])ans[End[j]]++; ans[cur]++;//替换 }}voidtopu(){queue<int> q;for(int i=1;i<=cnt;i++)if(In[i]==0)q.push(i);while(!q.empty()){int u=q.front(); q.pop();int v=fa[u]; In[v]--;ans[v]+= ans[u];if(In[v]==0)q.push(v);}}intmain(){string s; cin >> n;for(int i =1; i <= n; i++){cin >> s;build(s, i);}get_fail(); cin >> s;query(s);topu();for(int i =1; i <= n; i++)cout << ans[pos[i]]<< endl;return0;}
题目链接: 思路:
X进制数321怎么转换为十进制数为65?如下图:
①题目要求我们求 A - B 的最小值,对第 i 位,要求 A[i] - B[i] 的最小值,当进制越小的时候差值越小,但进制要比 max&…
Go 语言范围 (Range)
Go 语言是一种静态强类型、编译型、并发型编程语言,由 Google 开发。它的简洁性和高效性使其成为众多开发者的首选。在 Go 语言中,range 是一个非常有用的关键字,用于遍历数组、切片、字符串以及通道(channe…
二分查找
使用前提:有序。可理解为枚举的一种技巧。时间复杂度: l o g ( n ) log(n) log(n)
基础模版代码
使用时根据情景进行相应的变化。注意跳出条件and分支处理方式and返回答案,三者之间的配合,不要进入死循环。可以在模拟…
网络模型
定义一个两层网络
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F# 定义神经网络模型
class Net(nn.Module):def __init__(self, init_x0.0):super().__init__()self.fc1 nn.Linear(1, 10)self.fc2 nn.Linear(…