Submission #74678983
Source Code Expand
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
typedef long long ll;
typedef pair<ll,ll> PII;
typedef array<ll,2> a2;
typedef array<ll,3> a3;
int n,m,k;
int a[N];
bool tf[N];
vector<int> ed;
vector<int> v[N];
map<string,int> mp;
void cal(vector<int> v){
string s;
for(auto j:v){
char ch='a'+j;
s+=ch;
}
for(int i=0;i<s.size();i++){
string s0;
for(int j=i;j<s.size();j++){
s0+=s[j];
mp[s0]++;
}
}
}
struct ExSam
{
string s ;
int last , cnt ;
vector<vector<int>> tr ;
vector<int> nxt ;
vector<int> len ;
void init(int t)
{
last = cnt = 1 ;
int up1 = t * 2 + 10 ;
int up2 = 30 ; //字符集大小
tr.resize(0) ; //这是清空
tr.resize(up1 , vector<int>(up2 , 0)) ; //这是赋值
nxt.resize(0) ;
nxt.resize(up1 , 0) ;
len.resize(0) ;
len.resize(up1 , 0) ;
}
void add(int c)
{
if(tr[last][c])
{
int p = last , x = tr[p][c] ;
if(len[p] + 1 == len[x])
{
last = x ;
return ;//即最初的特判1
}
else
{
int y = ++ cnt ;
len[y] = len[p] + 1 ;
for(int i = 0 ; i < 26 ; i ++) tr[y][i] = tr[x][i] ;
while(p && tr[p][c] == x) tr[p][c] = y , p = nxt[p] ;
nxt[y] = nxt[x] , nxt[x] = y ;
last = y ;
return ; //即最初的特判2
}
}
int p = last , np = ++ cnt ;
last = np , len[np] = len[p] + 1 ;
for( ; p && !tr[p][c] ; p = nxt[p]) tr[p][c] = np ;
if(!p) nxt[np] = 1 ;
else
{
int q = tr[p][c] ;
if(len[p] + 1 == len[q]) nxt[np] = q ;
else
{
int nq = ++ cnt ;
len[nq] = len[p] + 1 ;
tr[nq].assign(tr[q].begin() , tr[q].end()) ;
nxt[nq] = nxt[q] , nxt[q] = nxt[np] = nq ;
for( ; tr[p][c] == q ; p = nxt[p]) tr[p][c] = nq ;
}
}
}
void build(const string &s)
{
last = 1 ;
for(auto &u : s) add(u - 'a') ;
}
void cal()
{
long long ans = 0 ;
for(int i = 1 ; i <= cnt ; i ++) ans += len[i] - len[nxt[i]] ;
cout << ans << '\n' ;
}
} exsam ;
void __(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
exsam.init(1000000 + 10) ;
int i=1,idx=1;
while(i<=n){
int j=i,cnt=0;
while(j<=n&&a[i]==a[j]){
j++;
cnt++;
}
if(cnt<a[i]){
idx++;
i=j;
}else if(cnt==a[i]){
v[idx].push_back(a[i]);
i=j;
}else{
v[idx].push_back(a[i]);
i=j-a[i];
idx++;
}
}
for(int i=1;i<=idx;i++){
// cal(v[i]);
string s;
if(!v[i].size()) continue;
for(auto j:v[i]){
char ch='a'+j-1;
s+=ch;
}
exsam.build(s);
}
exsam.cal();
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int _=1;
// cin>>_;
while(_--){
__();
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | G - 221 Substring |
| User | zhishengie |
| Language | C++23 (GCC 15.2.0) |
| Score | 600 |
| Code Size | 2987 Byte |
| Status | AC |
| Exec Time | 266 ms |
| Memory | 328868 KiB |
Compile Error
./Main.cpp: In function 'void cal(std::vector<int>)':
./Main.cpp:21:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
21 | for(int i=0;i<s.size();i++){
| ~^~~~~~~~~
./Main.cpp:23:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
23 | for(int j=i;j<s.size();j++){
| ~^~~~~~~~~
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 600 / 600 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00-sample-01.txt, 00-sample-02.txt |
| All | 00-sample-01.txt, 00-sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, 01-36.txt, 01-37.txt, 01-38.txt, 01-39.txt, 01-40.txt, 01-41.txt, 01-42.txt, 01-43.txt, 01-44.txt, 01-45.txt, 01-46.txt, 01-47.txt, 01-48.txt, 01-49.txt, 01-50.txt, 01-51.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00-sample-01.txt | AC | 192 ms | 315880 KiB |
| 00-sample-02.txt | AC | 188 ms | 315892 KiB |
| 01-01.txt | AC | 184 ms | 315864 KiB |
| 01-02.txt | AC | 185 ms | 315864 KiB |
| 01-03.txt | AC | 185 ms | 315892 KiB |
| 01-04.txt | AC | 186 ms | 315944 KiB |
| 01-05.txt | AC | 183 ms | 315744 KiB |
| 01-06.txt | AC | 186 ms | 315716 KiB |
| 01-07.txt | AC | 186 ms | 315944 KiB |
| 01-08.txt | AC | 187 ms | 315876 KiB |
| 01-09.txt | AC | 187 ms | 315816 KiB |
| 01-10.txt | AC | 189 ms | 315808 KiB |
| 01-11.txt | AC | 186 ms | 315776 KiB |
| 01-12.txt | AC | 186 ms | 315876 KiB |
| 01-13.txt | AC | 188 ms | 315880 KiB |
| 01-14.txt | AC | 189 ms | 315880 KiB |
| 01-15.txt | AC | 188 ms | 315864 KiB |
| 01-16.txt | AC | 200 ms | 315888 KiB |
| 01-17.txt | AC | 185 ms | 315864 KiB |
| 01-18.txt | AC | 186 ms | 315880 KiB |
| 01-19.txt | AC | 187 ms | 315856 KiB |
| 01-20.txt | AC | 209 ms | 328868 KiB |
| 01-21.txt | AC | 214 ms | 326388 KiB |
| 01-22.txt | AC | 200 ms | 317812 KiB |
| 01-23.txt | AC | 207 ms | 320008 KiB |
| 01-24.txt | AC | 231 ms | 319400 KiB |
| 01-25.txt | AC | 211 ms | 319056 KiB |
| 01-26.txt | AC | 207 ms | 318464 KiB |
| 01-27.txt | AC | 242 ms | 319620 KiB |
| 01-28.txt | AC | 247 ms | 319628 KiB |
| 01-29.txt | AC | 243 ms | 319648 KiB |
| 01-30.txt | AC | 203 ms | 319904 KiB |
| 01-31.txt | AC | 264 ms | 318952 KiB |
| 01-32.txt | AC | 266 ms | 319272 KiB |
| 01-33.txt | AC | 266 ms | 319120 KiB |
| 01-34.txt | AC | 224 ms | 319388 KiB |
| 01-35.txt | AC | 251 ms | 319048 KiB |
| 01-36.txt | AC | 215 ms | 319028 KiB |
| 01-37.txt | AC | 251 ms | 318804 KiB |
| 01-38.txt | AC | 216 ms | 319144 KiB |
| 01-39.txt | AC | 242 ms | 318424 KiB |
| 01-40.txt | AC | 242 ms | 318496 KiB |
| 01-41.txt | AC | 240 ms | 318368 KiB |
| 01-42.txt | AC | 207 ms | 318404 KiB |
| 01-43.txt | AC | 187 ms | 315792 KiB |
| 01-44.txt | AC | 186 ms | 315864 KiB |
| 01-45.txt | AC | 186 ms | 315744 KiB |
| 01-46.txt | AC | 189 ms | 315892 KiB |
| 01-47.txt | AC | 186 ms | 315816 KiB |
| 01-48.txt | AC | 188 ms | 315864 KiB |
| 01-49.txt | AC | 218 ms | 319584 KiB |
| 01-50.txt | AC | 204 ms | 319592 KiB |
| 01-51.txt | AC | 204 ms | 320540 KiB |