Submission #604026

# Submission time Handle Problem Language Result Execution time Memory
604026 2022-07-24T15:32:44 Z inksamurai Savez (COCI15_savez) C++17
120 / 120
342 ms 63116 KB
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
#define rng(i,c,n) for(int i=(c);i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define fi first
#define se second
#define pb push_back
#define sz(a) (int)a.size()
#define vec(...) vector<__VA_ARGS__>
#define _3aFGabX ios::sync_with_stdio(0),cin.tie(0)
typedef long long ll;
using pii=pair<int,int>;
using vi=vector<int>;
void print(){cout<<'\n';}
template<class h,class...t>
void print(const h&v,const t&...u){cout<<v<<' ',print(u...);}
// e

// kactl : Z function
vi Z(string S) {
	vi z(sz(S));
	int l = -1, r = -1;
	rng(i,1,sz(S)) {
		z[i] = i >= r ? 0 : min(r - i, z[i - l]);
		while (i + z[i] < sz(S) && S[i + z[i]] == S[z[i]])
			z[i]++;
		if (i + z[i] > r)
			l = i, r = i + z[i];
	}
	return z;
}


signed main(){
_3aFGabX;
	int n;
	cin>>n;
	vec(string) a,tmp;
	rep(i,n){
		string s;
		cin>>s;
		a.pb(s);
		string rs=s;
		reverse(rs.begin(), rs.end());
		tmp.pb(rs);
	}
	sort(tmp.begin(), tmp.end());
	tmp.erase(unique(tmp.begin(), tmp.end()),tmp.end());
	const int m=sz(tmp);
	// sort(a.begin(), a.end(),[&](const string&l,const string&r){
	// 	return sz(l)<sz(r);
	// });
	vi dp(m,0);
	rep(i,n){
		vi z=Z(a[i]);
		// rep(j,sz(a[i])){
		// 	cout<<z[j]<<" ";
		// }
		// print("....");
		string rs=a[i];
		reverse(rs.begin(), rs.end());
		int id=(int)(lower_bound(tmp.begin(), tmp.end(),rs)-tmp.begin());
		string now="";
		int res=dp[id];
		per(j,sz(a[i])){
			now+=a[i][j];
			if(!j or z[j]==sz(a[i])-j){
				int ni=(int)(lower_bound(tmp.begin(), tmp.end(),now)-tmp.begin());
				// if(i==2) print(ni);
				res=max(res,dp[ni]+1);
			}
		}
		dp[id]=res;
		// print(id,dp[id],a[i]);
	}
	print(*max_element(dp.begin(), dp.end()));
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 380 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 2 ms 468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 46 ms 2260 KB Output is correct
2 Correct 83 ms 2368 KB Output is correct
3 Correct 271 ms 2516 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 468 KB Output is correct
2 Correct 139 ms 3032 KB Output is correct
3 Correct 191 ms 2448 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 52 ms 3064 KB Output is correct
2 Correct 53 ms 3064 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 68 ms 4020 KB Output is correct
2 Correct 63 ms 4012 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 56 ms 5436 KB Output is correct
2 Correct 49 ms 5380 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 84 ms 8112 KB Output is correct
2 Correct 73 ms 7820 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 111 ms 15568 KB Output is correct
2 Correct 103 ms 15572 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 172 ms 25612 KB Output is correct
2 Correct 159 ms 25540 KB Output is correct
3 Correct 342 ms 63116 KB Output is correct