A.有a枚面值为1,b枚面值为2的硬币,求最小不能购买的价值。当a=0时,最小不能购买为1,当a>0时,不能购买的价值为a+2b+1。
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define inf 0x3f3f3f3f
const int mod = 1e9 + 7;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a * b / gcd(a, b);}
using namespace std;
void solve() {
ll a, b;
scanf("%lld%lld", &a, &b);
if (a == 0) {
printf("1\n");
}
else {
printf("%lld\n", a + 2 * b + 1);
}
}
int main(int argc, char** argv) {
int _t;
scanf("%d", &_t);
while (_t--)
solve();
return 0;
}
B.每次只吃一个糖果,选择当前最常见类型的糖果中的任何一种,他是否可以在不连续吃两个相同的糖果的情况下吃掉所有的糖果。
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define inf 0x3f3f3f3f
const int mod = 1e9 + 7;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a * b / gcd(a, b);}
using namespace std;
const int N = 2e5 + 10;
int a[N];
void solve() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a, a + n);
if (a[n - 1] - 1 > a[n - 2]) {
printf("NO\n");
}
else {
printf("YES\n");
}
}
int main(int argc, char** argv) {
int _t;
scanf("%d", &_t);
while (_t--)
solve();
return 0;
}
C.一个字符串 a 即使同时满足两个条件:它的长度n是偶数;
对于所有奇数 i (1≤i≤n−1),满足 ai=ai+1。
感觉就是用贪心的算法计算符合条件的,然后相减就能得到答案。
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define inf 0x3f3f3f3f
const int mod = 1e9 + 7;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a * b / gcd(a, b);}
using namespace std;
int dp[30];
void solve() {
memset(dp, 0, sizeof(dp));
string str;
cin >> str;
int cnt = 0;
for (int i = 0; i < str.size(); i++) {
dp[str[i] - 'a']++;
if (dp[str[i] - 'a'] == 2) {
cnt += 2;
memset(dp, 0, sizeof(dp));
}
}
printf("%d\n", str.size() - cnt);
}
int main(int argc, char** argv) {
int _t;
scanf("%d", &_t);
while (_t--)
solve();
return 0;
}
D.