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
AC × 2
AC × 53
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