问题:
给定一个由 N 个节点和 N-1 个边组成的无向图。所有边的长度均为 1。每条边i 的权重为Wi。(0 <= Wi <= 10.000)
该图保证没有任何循环。因此,两个节点之间始终存在一条(也是唯一的)最短路径。
从图中取出一对节点 (u, v):
给定数字K ,计算图中满足w - l >= K的 (u, v) 对的数量
例子:
N = 3, K = 1
Edges:
1 - 2 - 3
1 - 3 - 2
Run Code Online (Sandbox Code Playgroud)
(边描述为:u - v - w)
答案:6。所有可能的对是: (1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)
暴力解决方案(N < 100): …
问题:
给定一个包含 N 个字符的字符串 S (N <= 200 000),找出至少出现两次的最长子字符串的长度(子字符串可以重叠)。
我的解决方案:
这是我尝试过的:
int main()
{
std::string s;
std::cin >> s;
int max = 0;
typedef std::string::const_iterator sit;
sit end = s.end();
for(sit it1 = s.begin(); it1 != end; ++it1)
for(sit it2 = it1 + 1; it2 != end; ++it2)
max = std::max(max, std::mismatch(it1, it1 + (end - it2), it2).first - it1);
std::cout << max;
}
Run Code Online (Sandbox Code Playgroud)
题:
但是,上述解决方案在 O(n^3) 中运行时将获得 TLE。有什么方法可以改进它以便它可以在 O(n.logn) 中运行?
题:
给定一个字符串 SS.length() <= 5.10^5和一个整数 K K <= S.length()。对于每次移除,您可以:
我怎样才能准确地进行 K 次删除,以使最终字符串具有最小的字典顺序?
例子:
S = "abacaaba", K = 2
最后一个字符串:“aacaaa”,这是可能的最小字典。
附:
我已经尝试了很多天,但无法找到解决此问题的有效方法。但我认为这与动态规划有关。
给定一个包含 n 个整数的数组,索引从 1->n。任务是执行 Q 次给定的查询,并在每次查询后打印数组的总和。
我们可以执行三种类型的操作:
例子:
输入arr[] = {2, 3, 9, 5, 6, 6}, Q = 5
1 3
3 5
2 2
3 2
2 7
输出: 34 37 31 27 23
说明:
1 3 -> arr[] = {2, 3, 9, 5, 6, 6, 3} -> 总和 = 34
3 5 -> arr[] = {7, 6, …
algorithm ×4
c++ ×2
bitwise-xor ×1
graph-theory ×1
segment-tree ×1
string ×1
substring ×1
xor ×1