Codeforces Round #605 (Div. 3)题解

A.Three Friends

总共就27种情况, 搜就完事了

#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;


#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define _rev(i, a, b) for (int i = (a); i >= (b); --i)
#define _for(i, a, b) for (int i = (a); i < (b); ++i)
#define _rof(i, a, b) for (int i = (a); i > (b); --i)
#define oo 0x3f3f3f3f3f3f
#define ll long long
#define db double
#define eps 1e-8
#define bin(x) cout << bitset<10>(x) << endl;
#define what_is(x) cerr << #x << " is " << x << endl
#define met(a, b) memset(a, b, sizeof(a))
#define all(x) x.begin(), x.end()
#define pii pair<int, int>
const int mod = 998244353;
int nxt()
{
	int ret;
	scanf("%d", &ret);
	return ret;
}
const int maxn = 1e2 + 10;
ll ans = oo;
vector<ll> a(3);
void update() {
	ans = min(ans,(ll) ((ll)fabs(a[0] - a[1]) + fabs(a[0] - a[2]) + fabs(a[1] - a[2])));
}
void dfs(int cur) {
	if (cur == 3) {
		update();
		return;
	}
	_rep(i, 1, 3) {
		a[cur] += i - 2;
		dfs(cur + 1);
		a[cur] -= i - 2;
	}
}
signed main()
{
	int n = nxt();
	while (n--) {
		_rep(i, 0, 2)a[i] = nxt();
		ans = oo;
		sort(all(a));
		dfs(0);
		cout << ans << endl;

	}

}

B.Snow Walking Robot

小构造: 枚举最少的上下/左右的次数, 特判一下某一种为0的情况

#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;


#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define _rev(i, a, b) for (int i = (a); i >= (b); --i)
#define _for(i, a, b) for (int i = (a); i < (b); ++i)
#define _rof(i, a, b) for (int i = (a); i > (b); --i)
#define oo 0x3f3f3f3f3f3f
#define ll long long
#define db double
#define eps 1e-8
#define bin(x) cout << bitset<10>(x) << endl;
#define what_is(x) cerr << #x << " is " << x << endl
#define met(a, b) memset(a, b, sizeof(a))
#define all(x) x.begin(), x.end()
#define pii pair<int, int>
const int mod = 998244353;
int nxt()
{
	int ret;
	scanf("%d", &ret);
	return ret;
}
const int maxn = 1e2 + 10;
ll ans = oo;
string a;
map<char, int> mat;
signed main() {
	int n = nxt();
	_rep(i, 1, n) {
		cin >> a;
		for (auto i : a)
			mat[i]++;
		int ud = min(mat['U'], mat['D']);
		int lr = min(mat['L'], mat['R']);
		mat.clear();
		if (lr && ud)cout << (lr + ud) * 2 << endl;
		else if ((lr == 0 && ud) || (lr && ud == 0))cout << 2 << endl;
		else {cout << 0 << endl; continue;}
		_rep(i, 1, ud != 0 ?lr:1) {
			cout << 'L';
		}
		_rep(i, 1, lr != 0? ud:1) {
			cout << 'D';
		}
		_rep(i, 1, ud != 0 ?lr:1) {
			cout << 'R';
		}
		_rep(i, 1, lr != 0? ud:1) {
			cout << 'U';
		}
		cout << endl;
		
		
	}
}

c.Yet Another Broken Keyboard

#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;


#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define _rev(i, a, b) for (int i = (a); i >= (b); --i)
#define _for(i, a, b) for (int i = (a); i < (b); ++i)
#define _rof(i, a, b) for (int i = (a); i > (b); --i)
#define oo 0x3f3f3f3f3f3f
#define ll long long
#define db double
#define eps 1e-8
#define bin(x) cout << bitset<10>(x) << endl;
#define what_is(x) cerr << #x << " is " << x << endl
#define met(a, b) memset(a, b, sizeof(a))
#define all(x) x.begin(), x.end()
#define pii pair<int, int>
const int mod = 998244353;
int nxt()
{
	int ret;
	scanf("%d", &ret);
	return ret;
}
const int maxn = 2e5 + 10;
ll ans = oo;
string a;
map<char, int> mat;
signed main() {
	int n = nxt(), can_use = nxt();
	cin >> a;
	_rep(i, 1, can_use) {
		char c;
		cin >> c;
		mat[c]++;
	}
	int last = 0;
	ll ans = (ll)n * (n + 1) / 2;

	_for(i, 0, a.size()) {
		if (mat[a[i]])continue;
		ans -= (ll)((ll)i - last + 1) * (a.size() - i);
		last = i+1;
	}
	cout << ans << endl;
}

D.Remove One Element

(wa) 待修

#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;


#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define _rev(i, a, b) for (int i = (a); i >= (b); --i)
#define _for(i, a, b) for (int i = (a); i < (b); ++i)
#define _rof(i, a, b) for (int i = (a); i > (b); --i)
#define oo 0x3f3f3f3f3f3f
#define ll long long
#define db double
#define eps 1e-8
#define bin(x) cout << bitset<10>(x) << endl;
#define what_is(x) cerr << #x << " is " << x << endl
#define met(a, b) memset(a, b, sizeof(a))
#define all(x) x.begin(), x.end()
#define pii pair<int, int>
const int mod = 998244353;
int nxt()
{
	int ret;
	scanf("%d", &ret);
	return ret;
}
const int maxn = 2e5 + 10;
ll ans = oo;
string a;
map<char, int> mat;
signed main() {
	int n = nxt();
	vector<int> neg, a(n + 1), sub(n + 1);
	int len = 0;
	int ans = 0, lst = 1;
	_rep(i, 1, n) {
		a[i] = nxt();
		sub[i] = a[i] - a[i - 1];
		if (sub[i] <= 0)neg.emplace_back(i), len = 0;
		else {
			len++;
			ans = max(ans, len);
		}
	}
	_for(i, 0, neg.size()) {
		if (sub[neg[i]] + sub[neg[i] - 1] > 0) {
			if(i < neg.size() - 1)ans = max(ans, neg[i + 1] - lst);
			else ans = max(ans, n - lst);
		}
		lst = neg[i];
	}
	cout << ans << endl;


}

E

F

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值