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;
}