1925(921div2)
只做了一题,仍然是个废物
A. We Got Everything Covered!
给你两个正整数
您的任务是找出一个字符串
,使得所有可能的长度为 的字符串都可以用前 个小写英文字母作为 的子序列出现。
如果有多个答案,则打印长度最小的答案。如果仍有多个答案,可以打印其中任意一个。
注: 如果从
void solve()
{
int n, k;
cin >> n >> k; // n:子字符串长度,k:字母个数
vector<char> a;
for (int i = 1; i <= n; i++)
for (int i = 1; i <= k; i++)
a.push_back('a' + i - 1);
for (auto x : a)
cout << x;
cout << '\n';
}
B. A Balanced Problemset?
将 gcd
最大,也就是最平衡。
Solution
想了半天没想出来
没太搞懂
这段代码已经被 HACK 了,现在提交会 T

void solve()
{
int n, x;
cin >> x >> n;
if (n == 1)
{
cout << x << '\n';
return;
}
for (int i = x / n; i >= 1; i--)
{
if (x % i == 0 && x / i >= n)
{
cout << i << '\n';
return;
}
}
}
有:
所以答案一定是
现在,考虑
- 当
,选择为: 有可行答案 - 当
,有可行答案 (本来每一份是 份,这时 ,如果分为 份每一份就是 可以分为更多份,每一份也更大, 的部分可以直接安到任意位置,这时的 也可以作为答案)
- 直接遍历因子
(然后 )会超时 - 遍历因子
(然后 ) 这样就可以将因子遍历完。
找到满足该条件的最大

void solve()
{
int n, x;
cin >> x >> n;
int ans = 1;
for (int i = 1; i * i <= x; i++)
{
if (x % i == 0)//如果i是x的因子
{
if (n <= x / i)//n*i<=x ->i i i ... x-(n-1)*i ->i
ans = max(ans, i);
if (n <= i)
ans = max(ans, x / i);
}
}
cout << ans << '\n';
}
C . Did We Get Everything Covered?
给你两个整数
您的任务是检查是否所有长度为
的字符串都可以用第一个 小写英文字母组成,并作为 的子序列出现。
如果答案是否定的,那么您还需要打印一个长度为
如果有多个答案,您可以打印任意一个。
注: 如果从
(待更