返回顶部

Educational Codeforces Round 98 (Rated for Div. 2)

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\) , 并且\((n - 1) \mid (sum + ans)\)\(ans\)如果是负数,转化成模\((n-1)\)意义下的正数即可.


#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

posted @ 2020-11-21 11:00  __October  阅读(103)  评论(0编辑  收藏  举报