首页 > 其他分享 >2020牛客暑期多校训练营(第一场)

2020牛客暑期多校训练营(第一场)

时间:2023-02-03 11:34:47浏览次数:35  
标签:fir int rep 多校 牛客 2020 sec sa mod


A B-Suffix Array

题意;

将字符串 2020牛客暑期多校训练营(第一场)_字符串 的每个后缀化成 2020牛客暑期多校训练营(第一场)_数组_02 数组,然后对 2020牛客暑期多校训练营(第一场)_数组_02 数组进行字典序排序。
那个定义的规则就是找前面和他相同字符的最近距离,否则为 2020牛客暑期多校训练营(第一场)_ci_04

2020牛客暑期多校训练营(第一场)_ci_05 相当于后面的最近的与 2020牛客暑期多校训练营(第一场)_ci_06 相同的字符到 2020牛客暑期多校训练营(第一场)_数组_07

对于不存在这样的 2020牛客暑期多校训练营(第一场)_数组_082020牛客暑期多校训练营(第一场)_ci_05,我们要让他比其他 2020牛客暑期多校训练营(第一场)_ci_05 都大,设为 2020牛客暑期多校训练营(第一场)_字符串_11,然后最后再放一个 2020牛客暑期多校训练营(第一场)_字符串_122020牛客暑期多校训练营(第一场)_ci_13 的末尾,最后求出 2020牛客暑期多校训练营(第一场)_ci_13 的后缀数组,去掉最后一位倒着输出就是答案。

2020牛客暑期多校训练营(第一场)_数组_15


2020牛客暑期多校训练营(第一场)_ci_16

AC代码:

const int N = 1e5 + 50;
int n, s[N];
char S[N];
int fir[N], sec[N], sa[N], c[N];
void get_SA()
{
int m = n;
rep(i, 1, n)
c[fir[i] = s[i]]++;
rep(i, 2, m)
c[i] += c[i - 1];
per(i, n, 1)
sa[c[fir[i]]--] = i;
for (int k = 1, tot; k < n; k <<= 1)
{
tot = 0;
rep(i, n - k + 1, n)
sec[++tot] = i;
rep(i, 1, n) if (sa[i] > k)
sec[++tot] = sa[i] - k;
rep(i, 1, m)
c[i] = 0;
rep(i, 1, n)
c[fir[i]]++;
rep(i, 2, m)
c[i] += c[i - 1];
per(i, n, 1)
sa[c[fir[sec[i]]]--] = sec[i];
rep(i, 1, n)
swap(fir[i], sec[i]);
fir[sa[1]] = tot = 1;
rep(i, 2, n) if (sec[sa[i]] == sec[sa[i - 1]] && sec[sa[i] + k] == sec[sa[i - 1] + k])
fir[sa[i]] = tot;
else fir[sa[i]] = ++tot;
if (tot == n)
break;
m = tot;
}
}

int main()
{
while (~sd(n))
{
ss(S + 1);
rep(i, 1, n)
{
rep(j, i + 1, n)
{
if (S[j] == S[i])
{
s[i] = j - i;
break;
}
}
if (!s[i])
s[i] = n;
}
n++;
s[n] = n;
get_SA();
per(i, n - 1, 1)
printf("%d ", sa[i]);
printf("\n");
rep(i, 1, n)
s[i] = fir[i] = sec[i] = sa[i] = c[i] = 0;
}
}

F Infinite String Comparision

题意:

给定两个字符串 2020牛客暑期多校训练营(第一场)_数组_17。比较无限个字符串 2020牛客暑期多校训练营(第一场)_数组_18 拼接和无限个字符串 2020牛客暑期多校训练营(第一场)_字符串_19

先把长的串复制两次,然后把短的串变成复制或长串的长度直接比较就行了。

AC代码:

const int N = 1e6 + 50;
int n, m, k, x;
string a, b;
int main()
{
int t;
while (cin >> a >> b)
{
int len1 = a.size();
int len2 = b.size();
if (len1 == len2)
{
if (a == b)
puts("=");
else if (a < b)
puts("<");
else
puts(">");
}
else if (len1 < len2)
{
b += b;
len2 += len2;
string s = a;
int len = len1;
while (len + len1 <= len2)
{
s += a;
len += len1;
}
if (len < len2)
{
int res = len2 - len;
rep(i, 0, res - 1)
s += a[i];
}
//cout<<s<<endl;
//cout<<b<<endl;
if (s == b)
puts("=");
else if (s < b)
puts("<");
else
puts(">");
}
else
{
a += a;
len1 += len1;
string s = b;
int len = len2;
while (len + len2 <= len1)
{
s += b;
len += len2;
}
if (len < len1)
{
int res = len1 - len;
rep(i, 0, res - 1)
s += b[i];
}
//cout<<a<<endl;
//cout<<s<<endl;
if (s == a)
puts("=");
else if (s < a)
puts(">");
else
puts("<");
}
}
return 0;
}

J Easy Integration

题意;

给定一个 2020牛客暑期多校训练营(第一场)_数组_20,求 2020牛客暑期多校训练营(第一场)_字符串_21

2020牛客暑期多校训练营(第一场)_数组_22

2020牛客暑期多校训练营(第一场)_字符串_23

2020牛客暑期多校训练营(第一场)_ci_24

2020牛客暑期多校训练营(第一场)_字符串_25

2020牛客暑期多校训练营(第一场)_数组_26

2020牛客暑期多校训练营(第一场)_数组_27

2020牛客暑期多校训练营(第一场)_ci_28

AC代码:

ll mult(ll x, ll y, ll mod)
{
return (x * y - (ll)(x / (long double)mod * y + 1e-3) * mod + mod) % mod;
}

const int N = 2e6 + 50;
const int mod = 998244353;
int n, m, k, x;
ll f[N];

void init()
{
f[0] = 0;
f[1] = 1;
rep(i, 2, N - 10)
f[i] = mult(f[i - 1], i, mod);
}

int main()
{
init();
while (~sd(n))
{
ll ans = mult(qpow(f[n], 2, mod), qpow(f[2 * n + 1], mod - 2, mod), mod);
pld(ans);
}
return 0;
}


标签:fir,int,rep,多校,牛客,2020,sec,sa,mod
From: https://blog.51cto.com/u_15952369/6035729

相关文章

  • 2020牛客暑期多校训练营(第二场)
    BBoundary题意在平面上给若干个点,求一个过原点的圆,使得尽量多的点在圆上。保证点数不超过,坐标绝对值不超过。枚举两个点,与原点三点确定一个圆。求得每个点的圆心位置,用......
  • 2020年5月24日总结
    现在每天好像没了多少动力,没有再去学习新的知识点,都是在每天尽量去参加一两场比赛,可能不会开学了吧,暑假也不知道能不能去留校,不能去的话就制定一个计划表,落实到每一天的安排......
  • cve_2020_6507分析
    poc$catpoc.jsarray=Array(0x40000).fill(1.1);args=Array(0x100-1).fill(array);args.push(Array(0x40000-4).fill(2.2));giant_array=Array.prototype.......
  • GYCTF2020-Ez-Express
    title:GYCTF2020-Ez_Expressdate:2022-11-2514:49:24tags:CTF从这个题学到不少东西,记录一下。初识原型链首先这题是有个原型链污染,js中每个类都有个属性__proto_......
  • 2023牛客寒假算法基础集训营5
    2023牛客寒假算法基础集训营5AA很好理解题目大意是找k个小于等于x的物品(最多k个)的和最大是多少我们可以先把所有的a排序,然后求前缀和然后每次询问,我们需要的是小于等......
  • 2023牛客寒假算法基础集训营4 A-H+JLM
    比赛链接A题解知识点:数学。算一下发现\(3\)最好,\(2,4\)并列,\(4\)以后递减。于是,特判\(3\),其他取最小值。(众所周知,\(e\)进制最好qwq。时间复杂度\(O(1)\)......
  • kali2020(Debian)虚拟机能上网但是,无法ping通内网(你电脑上的其他虚拟机和物理机IP地址),但
    转载自:https://blog.csdn.net/qq_59318082/article/details/121519841首先,你要判断你所要ping的虚拟机是否处于跟你kali相同的网段,Linux的ip查看命令ifconfig Wind......
  • L 小沙の抱团 hard【2023牛客寒假算法基础集训营5】
    L 小沙の抱团hard原题链接代码点击查看代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#inclu......
  • K 小沙の抱团 easy【2023牛客寒假算法基础集训营5】
    K 小沙の抱团easy原题链接思路代码点击查看代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>......
  • H 小沙の店铺【2023牛客寒假算法基础集训营5】
    H 小沙の店铺原题链接代码点击查看代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<qu......