QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#345967 | #3199. Passwords | PetroTarnavskyi# | AC ✓ | 32ms | 4520kb | C++20 | 3.2kb | 2024-03-07 18:20:05 | 2024-03-07 18:20:05 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define RFOR(i, a, b) for(int i = (a) - 1; i >= (b); i--)
#define SZ(a) int(a.size())
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair
#define F first
#define S second
typedef long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef double db;
const int AL = 26;
const int mod = 1'000'003;
void updAdd(int& a, int b)
{
a += b;
if (a >= mod)
a -= mod;
}
struct Node
{
int p;
int c;
int g[AL];
int nxt[AL];
int link;
Node(int _c, int _p)
{
c = _c;
p = _p;
fill(g, g + AL, -1);
fill(nxt, nxt + AL, -1);
link = -1;
}
};
struct AC
{
vector<Node> a;
void init(int n)
{
a.reserve(n);
a.PB(Node(-1, -1));
}
int addStr(const string& s)
{
int v = 0;
FOR (i, 0, SZ(s))
{
int c = s[i] - 'a';
if (a[v].nxt[c] == -1)
{
a[v].nxt[c] = SZ(a);
a.PB(Node(c, v));
}
v = a[v].nxt[c];
}
return v;
}
int go(int v, int c)
{
if (c < 0 || c >= AL)
return 0;
if (a[v].g[c] != -1)
return a[v].g[c];
if (a[v].nxt[c] != -1)
a[v].g[c] = a[v].nxt[c];
else if (v != 0)
a[v].g[c] = go(getLink(v), c);
else
a[v].g[c] = 0;
return a[v].g[c];
}
int getLink(int v)
{
if (a[v].link != -1)
return a[v].link;
if (v == 0 || a[v].p == 0)
return 0;
return a[v].link = go(getLink(a[v].p), a[v].c);
}
} a;
const int N = 1047;
const int len = 25;
int dp[len][2][2][2][N];
bool islower(char c)
{
return 'a' <= c && c <= 'z';
}
bool isupper(char c)
{
return 'A' <= c && c <= 'Z';
}
bool isdig(char c)
{
return '0' <= c && c <= '9';
}
bool was[N];
bool bad[N];
set<int> bd;
bool dfs(int v)
{
if (was[v])
return bad[v];
was[v] = 1;
bad[v] = bd.count(v);
int to = a.getLink(v);
bad[v] |= dfs(to);
return bad[v];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int A, B;
cin >> A >> B;
int n;
cin >> n;
a.init(N);
FOR (i, 0, n)
{
string s;
cin >> s;
int v = a.addStr(s);
bd.insert(v);
}
string alph = "";
map<char, char> m;
FOR (i, 0, 26)
{
alph += char('a' + i);
alph += char('A' + i);
m['a' + i] = 'a' + i;
m['A' + i] = 'a' + i;
}
FOR (i, 0, 10)
{
alph += char('0' + i);
m['0' + i] = '0' + i;
}
m['0'] = 'o';
m['1'] = 'i';
m['3'] = 'e';
m['5'] = 's';
m['7'] = 't';
int sz = SZ(a.a);
FOR (i, 0, sz)
{
if (!was[i])
dfs(i);
}
dp[0][0][0][0][0] = 1;
FOR (i, 0, len - 1)
{
FOR (isl, 0, 2)
{
FOR (isu, 0, 2)
{
FOR (isd, 0, 2)
{
FOR (v, 0, sz)
{
if (dp[i][isl][isu][isd][v] == 0 || bad[v])
continue;
for (auto c : alph)
{
int to = a.go(v, m[c] - 'a');
updAdd(dp[i + 1][isl | islower(c)][isu | isupper(c)][isd | isdig(c)][to], dp[i][isl][isu][isd][v]);
}
}
}
}
}
}
int ans = 0;
FOR (i, A, B + 1)
{
FOR (v, 0, sz)
{
if (bad[v])
continue;
updAdd(ans, dp[i][1][1][1][v]);
}
}
cout << ans << '\n';
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 2ms
memory: 4328kb
input:
3 5 9 swerc icpc fbi cia bio z hi no yes
output:
607886
result:
ok single line: '607886'
Test #2:
score: 0
Accepted
time: 1ms
memory: 4208kb
input:
4 5 0
output:
887311
result:
ok single line: '887311'
Test #3:
score: 0
Accepted
time: 1ms
memory: 4284kb
input:
3 5 1 a
output:
223848
result:
ok single line: '223848'
Test #4:
score: 0
Accepted
time: 1ms
memory: 4184kb
input:
4 5 10 a c e g i k m o q s
output:
178702
result:
ok single line: '178702'
Test #5:
score: 0
Accepted
time: 0ms
memory: 3868kb
input:
3 4 26 a b c d e f g h i j k l m n o p q r s t u v w x y z
output:
0
result:
ok single line: '0'
Test #6:
score: 0
Accepted
time: 2ms
memory: 4476kb
input:
3 5 8 fcup porto swerc ola hello no yes abc
output:
839906
result:
ok single line: '839906'
Test #7:
score: 0
Accepted
time: 2ms
memory: 4328kb
input:
3 5 10 attc tcag gtc gta aaaa ccaaa ttcg gacga aagcg cagd
output:
796623
result:
ok single line: '796623'
Test #8:
score: 0
Accepted
time: 2ms
memory: 4232kb
input:
3 5 12 a baz cbaz dcbaz hendb endb ndb b nn onno ayesb yes
output:
511313
result:
ok single line: '511313'
Test #9:
score: 0
Accepted
time: 1ms
memory: 4444kb
input:
4 6 50 hph h pp hhphpp p ph hh hhpp hpphhp hhp ppphp pph pppp hphph phhphh hpph hphphp phphp phphh hhh pphp phhh pphh ppphh phphpp phh hpphhh hhhh pphph phpp phph hhhhph hpphh hp hpp pphpp hhhp phhp hhph ppph hppph phhhh ppppp hppp hhphph hphphh ppp hhhpph hpppp hppphp
output:
344974
result:
ok single line: '344974'
Test #10:
score: 0
Accepted
time: 4ms
memory: 4304kb
input:
3 6 50 wqog sjqr fcbqax y xpwwi j gklgnc bmhark qgaj uvfpwz hi nallwx obms oigkq uehl r fq uqe rbhbt luzt jxyu fgvrk s gidv jlagzj cyshm ixjxu vkhjh ibbw k zq b knav ayxeqm rncdp kzqdww cdkkw fjl hy l qsakh bgju yzx sf emuc lq wcaba wla yal e
output:
188830
result:
ok single line: '188830'
Test #11:
score: 0
Accepted
time: 0ms
memory: 4520kb
input:
3 10 25 axaxxx txrj tt tttaxjr xxxrtj xttarxxxtx xaxjr r jrrjrxjr aarajar txt x rt xatxt xttj xjja xra jxt ra taaxra aj rjr xxaxaaj xxttrjxa xxtajx
output:
687381
result:
ok single line: '687381'
Test #12:
score: 0
Accepted
time: 13ms
memory: 4280kb
input:
3 15 35 vxkqvdexdx zxvee mvozimqezvxqoe qev vxiovmmdxq xozzzm iqexzoxqievxze deezqqdkek zvzodz veizidqkemvziox zmzidxidezve koxdvdm ozzmii xvedxqmm dqziexoe qdmo dokieiodoqzdzix dke odqo imeemxvexxzov veeixmvdq vdveoqv ixmezo dqoeexizokemovo dddzeokm ozizmq izieei kexzkqmxoqkeo dkoez voqmoidimzvm qq...
output:
841929
result:
ok single line: '841929'
Test #13:
score: 0
Accepted
time: 0ms
memory: 4296kb
input:
10 15 45 aa rrraxrarrkakxaa kr rkrarxrkxrark kkkakarxrr rrkakarxrr axxxaxakkkxxkrk aaxrrkarxaxaxk xrxa aaaakxxkaraar rxrr axraaaaxxxxkxk xx rrxx xakkxrrx k rkarrxkkrx rara xxaarakax raraakkaaaxa kxxr kraxkaxaar x xkkkkxxkk rkkarr krxkkxkrxkxkxax araxkkrx arar aaa xaarkxarkxxk xrk krrkkxrxa xaxrkxrax...
output:
322551
result:
ok single line: '322551'
Test #14:
score: 0
Accepted
time: 9ms
memory: 4280kb
input:
18 18 50 pnn pnppplnlpnnllpplnn pllnpppl llpppplnppnnppnlp lln lplnnnlnplnn nlllppllplppplll lllppp plplplpllpppnllll ppplpnplnnpp ppnpnnn nnnnpnnppnnnnpn npllnppnnl pnpnl pnpll npll lnlnlpppplpnplpnp npnlnnlnllpplpp nlplpp nnppnllppllpnnll ppnlnlnplnllnl pnplplplllpnnp lpnnppnlppnnn ppnlpnp nplnpnp...
output:
389309
result:
ok single line: '389309'
Test #15:
score: 0
Accepted
time: 12ms
memory: 4352kb
input:
4 19 50 psmx wwpswpqqxymyytyx xp ywmasrmddtppwawdy yzsjgzjxazggprsnpa nngnqdgqpmpzjwt dznrtstpmrmyzzra qryzdgjpdxtpxypatzs zmyn wasyxsppqjpxzaradzw xmyngqtrgnpdnmywy spypzgmxq dxwrtnpg pqp jpqsxrqgxjrq dpwqs agzayxgqzwjwztr xpqtzxry rx njrr ajgwdwr ymjysjzgnqpwdxzjj pqazyxxryrmtzwmxn ms tqqrztnrrtzn...
output:
684686
result:
ok single line: '684686'
Test #16:
score: 0
Accepted
time: 1ms
memory: 4260kb
input:
3 20 0
output:
998674
result:
ok single line: '998674'
Test #17:
score: 0
Accepted
time: 28ms
memory: 4300kb
input:
3 20 50 gwogsnogslv dlwngqvnvvjod qvvwssloqlvjwld lgndnlwosjsdg qqjqsdolwddjs dnoojjwwnlodd sdsojlnvgwjqoslnno jddnnjwqvnjq solvgologqndgosjdgn vwdolvqsndnowoqwd qlwlogwqwndqlqsgjvvw onovnlwdowvwwn sddsvgonqnjlgd svsdlngdsndlqnqddjg dgvsngdsgq ggvdloloqsssnogv lsngqgodgwjosodq wsqvoolnqsjd joswdggll...
output:
507317
result:
ok single line: '507317'
Test #18:
score: 0
Accepted
time: 32ms
memory: 4380kb
input:
3 20 50 ploynntcvajxahnainmo vhgcnjxidsfbudfxozng vjsljvycjydraaxmfwec nkpkhtwpjqdserapecfw tufqdnmuodfrxlfafcia aerajvorujijmgebsvyt layevdwrdirqdbjiycgf suwgmhmnvqyhsilqyaok orundlohsmzncfbjifwg xallxiszxkxuahclwdjc uqnioqwsglsgdjjltvsn nkcgdhkhjeaocrncoyxu jcylizcagdlqfqyknmuc yqojefflbxbszhftdnj...
output:
17312
result:
ok single line: '17312'