2020牛客国庆集训派对day1
A ABB
马拉夫算法
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int N=4e5+10;
int base=11;
int n;
char s[400005];
int main()
{
scanf("%d%s", &n, s);
ll h1=0, h2=0, t=1;
int ans=0;
for(int i=n-1; i>=0; i--) {
h1=h1*base+s[i];
h2=h2+s[i]*t; t*=base;
if(h1==h2) ans=i;
}
printf("%d\n", ans);
return 0;
}
#include <bits/stdc++.h>
#define int ll
using namespace std;
typedef long long ll;
const int maxn = 4e5 + 10;
int n;
char p[maxn],s[maxn<<1];
int l[maxn<<1];
int manacher() {
int cnt=0;
s[cnt]='@';s[++cnt]='#';
for (int i = 0; i <n; ++i)
s[++cnt]=p[i],s[++cnt]='#';
int mr=0,cen=0,ans=cnt;
for (int i = 1; i <=cnt; ++i) {
if (mr>=i) l[i]=min(l[2*cen-i],mr-i);
else l[i]=1;
while (s[i-l[i]]==s[i+l[i]]) l[i]++;
if (mr<l[i]+i) mr=l[i]+i,cen=i;
if (l[i]+i-1==cnt) ans=min(ans,(i-l[i]+1)/2);
}
return ans;
}
void solve() {
cin>>n>>p;
cout<<manacher();
}
signed main() {
int _ = 1;
while (_--) {
solve();
}
return 0;
}
C Bob in Wonderland
#include <bits/stdc++.h>
#define int ll
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
const int maxn = 3e5 + 10;
int d[maxn];
void solve() {
int n,ans=0;
cin>>n;
for(int i=0;i<n-1;i++){
int u,v;
cin>>u>>v;
d[u]++,d[v]++;
}
for (int i = 0; i <=n; ++i) {
if (d[i]>2) ans+=d[i]-2;
}
cout<<ans;
}
signed main() {
int _ = 1;
while (_--) {
solve();
}
return 0;
}