测试样式
Posted yexuesong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试样式相关的知识,希望对你有一定的参考价值。
测试
// https://dsa.cs.tsinghua.edu.cn/oj/problem.shtml?id=1144
#include "cstdio"
using namespace std;
const int SZ = 1 << 20; //快速io
struct fastio
{
char inbuf[SZ];
char outbuf[SZ];
fastio()
{
setvbuf(stdin, inbuf, _IOFBF, SZ);
setvbuf(stdout, outbuf, _IOFBF, SZ);
}
} io;
const int maxn = 4e6 + 100;
using ll = long long;
struct node
{
int x, y;
} a[maxn], b[maxn];
ll count = 0;
// 按照 x 升序排列
void mergeX(int lo, int mi, int hi)
{
int i = lo, j = mi;
for (int k = lo; k < hi; k++)
{
// 这里用了两个 node 来操作,所以不用复制子序列出来
if (hi <= j || (i < mi && (a[i].x < a[j].x || (a[i].x == a[j].x && a[i].y < a[j].y))))
b[k] = a[i++];
else
b[k] = a[j++];
}
for (int k = lo; k < hi; k++)
a[k] = b[k];
}
void mergeSortX(int lo, int hi)
{
if (hi - lo < 2)
return;
int mi = (hi + lo) >> 1;
mergeSortX(lo, mi);
mergeSortX(mi, hi);
mergeX(lo, mi, hi);
}
void mergeY(int lo, int mi, int hi)
{
int i = lo, j = mi;
for (int k = lo; k < hi; k++)
{
// i < j 则 j 的右侧都更大,个数为 (hi - 1) - (j - 1)
if (hi <= j || (i < mi && a[i].y < a[j].y))
b[k] = a[i++], count += hi - j;
else
b[k] = a[j++];
}
for (int k = lo; k < hi; k++)
a[k] = b[k];
}
void mergeSortY(int lo, int hi)
{
if (hi - lo < 2)
return;
int mi = (hi + lo) >> 1;
mergeSortY(lo, mi);
mergeSortY(mi, hi);
mergeY(lo, mi, hi);
}
int main()
{
ll n;
scanf("%lld", &n);
for (int i = 0; i < n; i++)
{
scanf("%d %d", &a[i].x, &a[i].y);
}
mergeSortX(0, n);
mergeSortY(0, n);
printf("%lld
", count);
return 0;
}
(O) 时间复杂度
[ O(1) < O(log n) < O(n) < O(n log n) < O(n^2) < O(2^n) < O(n!) ]
Big-O Cheat Sheet @Eric Rowell
二分计算中 (O(log n)) 的由来:n 个元素,k 次计算
[ n cdot (frac{1}{2})^{k} = 1 ightarrow n = 2^k ightarrow k = log n ]
典型的复杂度:
算数级数,与末项平方同阶
幂方级数,比幂次高出一阶
几何级数,与末项同阶
调和级数 (O(log n))
对数级数 (O(n log n))
理解 Max 2 案例
从 (O(2n - 3)) 到 (O(n - 1)),
再到 (O(5n/3 - 2)),
推导过程简述:
(T(n) + 2 = 2 * (T(frac{n}{2}) + 2)),令 (G(n) = T(n) + 2),有
(G(n) = 2G(frac{n}{2}) = 4G(frac{n}{4}) = 8G(frac{n}{8}) = ...)
不考虑取整,有 (G(n) = (frac{n}{3})G(n/(frac{n}{3}))=(frac{n}{3})G(3))
递归基为 (G(2)) 和 (G(2)) ,取较大者,(G(n)=(frac{n}{3})G(3)<=frac{5n}{3})
所以有 (T(n) = G(n)-2 le frac 5 3 cdot n-2)
本章需要学会规范的表述时间复杂度的推导过程
拓展:推导 递归,迭代 求解 Fibonacci sequence 的时间复杂度
递归设计出解,动态规划消除重复计算
以上是关于测试样式的主要内容,如果未能解决你的问题,请参考以下文章
CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段