旅游回来后补题の
AcWing 4791. 死或生
原题连接
注意到本题说的是总票数,所以直接算总和然后比较
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n;
std::cin >> n;
std::vector<int> a(n + 1),b(n + 1);
for (int i = 1; i <= n; i ++) {
int t,x,y;
std::cin >> t >> x >> y;
a[t] += x,b[t] += y;
}
for (int i = 1; i <= 2; i ++) {
std::cout << (a[i] >= b[i] ? "LIVE\n" : "DEAD\n");
}
return 0;
}
AcWing 4792. 最大价值
原题连接
题解
贪心,可以看到给定的字符串其价值是固定的,所以只需要插入最大的价值即可。找到最大价值的字符,然后模拟加入到答案即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
string s;
std::cin >> s;
int k;
std::cin >> k;
std::vector<int> v(26);
for (int i = 0; i < 26; i ++) {
std::cin >> v[i];
}
int res = 0,n = s.size();
for (int i = 0; i < n; i ++) {
res += v[s[i] - 'a'] * (i + 1);
}
char t = max_element(v.begin(), v.end()) - v.begin();
for (int i = n + 1; i <= n + k; i ++) res += i * v[t];
std::cout << res << "\n";
return 0;
}
AcWing 4793. 危险程度
原题连接
题解
并查集,如果1与2能发生反应,2与3能发生反应,那么1与3也能发生反应(1和2加入后)。所以每次并查集连边,记录变数,每条边乘以2的危险值
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1010;
int n, m;
int pre[N];
int find(int x)
{
return pre[x] == x ? pre[x] : pre[x] = find(pre[x]);
}
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n,m;
std::cin >> n >> m;
for (int i = 1; i <= n; i ++) pre[i] = i;
int c = 0;
while (m -- ) {
int a,b;
std::cin >> a >> b;
a = find(a),b = find(b);
if (a != b) {
pre[a] = b;
c ++;
}
}
std::cout << (1ll << c) << "\n";
return 0;
}