Name: 2022CSP-J集训测试Round 1
Contest Time: 2022-6-30 18:30 ~ 21:30
Problem A. 不重最长子串
Background
Special for beginners, ^ _ ^
Description
给定一个字符串 s s s,请你找出其中不含有重复字符的最长子串的长度。
Format
Input
一行,一个字符串 s s s,长度在 0 ∼ 50000 0 \sim 50000 0∼50000 之间,由英文字母、数字和空格组成。
Output
输出一个整数,为不含有重复字符的最长子串的长度。
Samples
Test1
abcabcbb
3
Hint1
因为无重复字符的最长子串是 abc
,所以其长度为 3。
Test2
bbbbb
1
Hint2
因为无重复字符的最长子串是 b
,所以其长度为 1。
Test3
pwwkew
3
Hint3
因为无重复字符的最长子串是 wke
,所以其长度为 3。
Notice
你的答案必须是 子串 的长度,pwke
是一个子序列,不是子串。
Limitation
1s, 1024KiB for each test case.
Code
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;
string str;
unordered_map <char, int> st;
int main ()
{
ios :: sync_with_stdio (NULL);
getline (cin, str);
int l = 0, r, ans = 0;
for (r = 0; r < str.size (); ++r)
{
l = max (l, st[str[r]]);
ans = max (ans, r - l + 1);
st[str[r]] = r + 1;
}
cout << ans << endl;
return 0;
}
Problem B. 小J的加密算法
Background
Special for beginners, ^ _ ^
Description
上大学了,小J学会了一种加密算法,这种算法可以根据一个行数 mm,将一个字符串进行重新排列,变成无法读懂的密文。
例如:给定一个字符串 PAYPALISHIRING
,行数 3,将其进行从上到下,从左到右的Z字形排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:PAHNAPLSIIGYIR
。
Format
Input
一个由英文字母及英文标点符号组成的字符串 s s s 及一个行数 m m m ( 1 ≤ m ≤ 1000 ) (1\le m\le 1000)