演算法打卡日誌-2020.11.20| LeetCode147
阿新 • • 發佈:2020-11-20
A
如果\(n = m\),答案為\(2 \times n\);如果\(n \ne m\),答案為\(2 \times max(n,m) - 1\)
#include <bits/stdc++.h>
using namespace std;
int n, m;
int main()
{
int __;
scanf("%d", &__);
while(__ -- )
{
scanf("%d%d", &n, &m);
printf("%d\n", 2 * max(n, m) - (m != n));
}
return 0;
}
B
\(max(a_i) \times (n - 1) <= sum + ans\)
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1e5 + 20; int n, a[N]; int main() { int __; scanf("%d", &__); while(__ --) { scanf("%d", &n); LL sum = 0, maxn = 0; for(int i = 1; i <= n; ++ i) { scanf("%d", &a[i]); sum += a[i]; maxn = max(maxn, (LL)a[i]); } LL res = maxn * (n - 1) - sum; if(res < 0) res = (res % (n - 1) + (n - 1)) % (n - 1); printf("%lld\n", res); } return 0; }
C
#include <bits/stdc++.h> using namespace std; const int N = 2e5 + 20; char str[N]; int main() { int __; scanf("%d", &__); while(__ -- ) { scanf("%s", str); int res = 0, a = 0, b = 0; for(int i = 0; str[i]; ++ i) { if(str[i] == '[') a ++; if(str[i] == ']' && a) a --, res ++; if(str[i] == '(') b ++; if(str[i] == ')' && b) b --, res ++; } printf("%d\n", res); } return 0; }
D
預處理fib,求\(2^n\)的逆元即可
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MOD = 998244353;
const int N = 2e5 + 10;
int n, f[N];
int pow_mod(int a, int b, int p)
{
int res = 1;
while(b)
{
if(b & 1) res = (LL)res * a % p;
a = (LL)a * a % p;
b >>= 1;
}
return res;
}
int main()
{
f[1] = f[2] = 1;
for(int i = 3; i < N; ++ i) f[i] = (f[i - 1] + f[i - 2]) % MOD;
scanf("%d", &n);
int res = (LL)f[n] * pow_mod(pow_mod(2, n, MOD), MOD - 2, MOD) % MOD;
printf("%d\n", res);
return 0;
}
2020.11.21