Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#include
#include
#include
#define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() typedef long long ll; using namespace std; using namespace __gnu_pbds; #define ld long double #define int long long #define F first #define S second #define Lnode 2*node+1 #define Rnode 2*node+2 #define MID (l+r>>1) #define el '\n' #define coutf(x) for(auto v:(x)) cout<
>v; #define all(x) x.begin(),x.end() #define ll long long #define sz(x) (int)x.size() #define pi pair
#define pii pair
> #define vi vector
#define ordered_set tree
, rb_tree_tag,tree_order_statistics_node_update> const int N=5005,mod=1e9+7; using ull = unsigned long long; // order_of_key (k) : Number of items strictly smaller than k . // find_by_order(k) : K-th element in a set (counting from zero). struct aho_corasick { struct trie_node { vector
pIdxs; //probably take memory limit map
next; int fail; trie_node() : fail(0) {} bool have_next(char ch) { return next.find(ch) != next.end(); } int& operator[](char ch) { return next[ch]; } }; vector
t; vector
patterns; vector
end_of_pattern; vector
found; vector
> adj; int insert(const string &s, int patternIdx) { int root = 0; for (const char &ch : s) { if (!t[root].have_next(ch)) { t.push_back(trie_node()); t[root][ch] = t.size() - 1; } root = t[root][ch]; } t[root].pIdxs.push_back(patternIdx); return root; } int next_state(int cur, char ch) { while (cur > 0 && !t[cur].have_next(ch)) cur = t[cur].fail; if (t[cur].have_next(ch)) return t[cur][ch]; return 0; } void buildAhoTree() { queue
q; for (auto &child : t[0].next) q.push(child.second); while (!q.empty()) { int cur = q.front(); q.pop(); for (auto &child : t[cur].next) { int k = next_state(t[cur].fail, child.first); t[child.second].fail = k; vector
&idxs = t[child.second].pIdxs; //dp[child.second] = max(dp[child.second],dp[k]); idxs.insert(idxs.end(), all(t[k].pIdxs)); q.push(child.second); } } } void buildFailureTree() { adj = vector
>(t.size()); for (int i = 1; i < t.size(); i++) adj[t[i].fail].push_back(i); } aho_corasick(const vector
&_patterns) { t.push_back(trie_node()); patterns = _patterns; end_of_pattern = vector
(patterns.size()); found=vector
(patterns.size(),false); for (int i = 0; i < patterns.size(); i++) end_of_pattern[i] = insert(patterns[i], i); buildAhoTree(); //buildFailureTree(); } vector
match(const string &str) { int k = 0; int sum=0; vector
> rt(patterns.size()); for (int i = 0; i < str.size(); i++) { k = next_state(k, str[i]); for (auto &it : t[k].pIdxs) found[it]=1; } return found; } }; ll n,k; ll dp[55][1005][2][2]; string s1,s2; string s; vector
num; ll digit(ll i,ll node,bool found,bool f,aho_corasick &ac) { if (i==n)return (found>0); ll &ret=dp[i][node][found][f]; if (~ret)return ret; ll res=0; int LMT; if (f==0)LMT=num[i]; else LMT=9; for (int dgt=0;dgt<=LMT;dgt++) { int nf=f; if (f==0&&dgt
=mod)res-=mod; } return ret=res; } ll fun(string s,aho_corasick &ac){ num.clear(); for (auto it:s) { num.push_back(it-'0'); } n=s.size(); memset(dp,-1,sizeof dp); ll ans=digit(0,0,0,0,ac); return ans; } string minus1(string s) { int n=s.size(); int i=n-1; while (i>=0&&s[i]=='0')s[i]='9',i--; if (i>=0)s[i]--; else { for (int j=0;j
>s; cin>>s1>>s2; vector
pat; k=(int)(s2.size()+1)/2; for (int i=0;i+k<=(int)s.size();i++){ pat.push_back(s.substr(i,k)); } aho_corasick ac(pat); bool zero=1; for (int i=0;i
>tc; for (int i=1;i<=tc;i++){solve();} return 0; } /* */
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)