本篇题解只是记录我的做题过程代码,不提供最优解
(另外这里所有的时间复杂度都只分析单个样例,不算
t
t
t的时间复杂度)
点击此处查看对应的题目.
本题设计算法:模拟
本题特判一下 x 与 y 都为 0 的情况,是不需要操作的
再用sqrt判断一下是否可以将 s q r t ( x ∗ x + y ∗ y ) sqrt(x * x + y * y) sqrt(x∗x+y∗y)是否与其真正的平方数相等即可。
时间复杂度 O ( 1 ) O(1) O(1)
#include#include #include #include #include
B
点击此处查看对应的题目.
本题设计算法:贪心
贪心策略:从0开始,如果元素小于 B ,则加上 x ,反之减去 y 即可
时间复杂度 O ( n ) O(n) O(n)
#include#include #include #include #include
C
点击此处查看对应的题目.
本题设计算法:模拟
用ne数组记录其右括号下标,以便于后面右括号快速找到合法括号,而回文括号,只要任意前面有一个左括号就可以触发一个回文串
时间复杂度 O ( n ) O(n) O(n)
#include#include #include using namespace std; const int N = 5e5 + 10; int ne[N]; void solve() { int n; string s; cin >> n >> s; int pre = 0; //预处理ne数组 for (int i = n - 1; i >= 0; --i) { if (s[i] == ')') { ne[i] = pre; pre = i; } } int c = 0, i = 0; for (; i < n; ++i) { if (s[i] == '(') { if (i == n - 1)break; ++i; } else { if (ne[i] == 0)break; i = ne[i]; } ++c; } cout << c << ' ' << n - i << 'n'; } int main() { int t; cin >> t; while (t -- ) solve(); return 0; }



