【总结】综合测试1
T1——Red and Green Apples
Solution
Code
#include <cstdio>
#include <algorithm>
#define int long long
using namespace std;
const int MAXN = 1e5 + 5;
int x, y, a, b, c, ans, sum;
int p[MAXN], q[MAXN], r[MAXN];
bool cmp(int u, int v) { return u > v;}
signed main() {
scanf("%lld %lld %lld %lld %lld", &x, &y, &a, &b, &c);
sum = x + y;
for (int i = 1; i <= a; i++)
scanf("%lld", &p[i]);
for (int i = 1; i <= b; i++)
scanf("%lld", &q[i]);
for (int i = 1; i <= c; i++)
scanf("%lld", &r[i]);
sort(p + 1, p + a + 1, cmp);
sort(q + 1, q + b + 1, cmp);
sort(r + 1, r + c + 1, cmp);
int t1 = 1, t2 = 1, t3 = 1;
while ((x || y) && sum) {
if (!x && sum) {
if (t3 > c)
ans += q[t2++];
else if (t2 > b)
ans += r[t3++];
else if (q[t2] > r[t3])
ans += q[t2++];
else
ans += r[t3++];
y--;
sum--;
}
else if (!y && sum) {
if (t3 > c)
ans += p[t1++];
else if (t1 > a)
ans += r[t3++];
else if (p[t1] > r[t3])
ans += p[t1++];
else
ans += r[t3++];
x--;
sum--;
}
else if (sum) {
if (t1 <= a && p[t1] >= q[t2] && p[t1] >= r[t3])
ans += p[t1++], x--;
else if (t2 <= b && q[t2] >= p[t1] && q[t2] >= r[t3])
ans += q[t2++], y--;
else
ans += r[t3++];
sum--;
}
}
printf("%lld", ans);
return 0;
}
T2——Grudanje
Solution
Code
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#define int long long
using namespace std;
const int MAXN = 2e5 + 5;
int n, q, ans, maxv;
char s[MAXN];
int x[MAXN], y[MAXN];
int p[MAXN];
int c[MAXN][27], c1[MAXN][27];
bool vis[MAXN];
void update(int x, int k, int id) {
c1[x][id] += k;
}
int query(int x, int id) {
return c[x][id];
}
bool check(int m) {
for (int i = 0; i <= maxv; i++)
if (vis[i])
for (int j = 1; j <= n; j++)
c[j][i] = c1[j][i];
for (int i = 0; i <= maxv; i++)
if (vis[i])
for (int j = 1; j <= n; j++)
c[j][i] += c[j - 1][i];
for (int i = 0; i <= maxv; i++)
if (vis[i])
for (int j = 1; j <= q; j++) {
int l = x[j], r = y[j];
if (query(r, i) - query(l - 1, i) > 1)
return 0;
}
return 1;
}
signed main() {
scanf("%s", s + 1);
n = strlen(s + 1);
scanf("%lld", &q);
for (int i = 1; i <= q; i++)
scanf("%lld %lld", &x[i], &y[i]);
for (int i = 1; i <= n; i++)
scanf("%lld", &p[i]);
for (int i = 1; i <= n; i++) {
vis[s[i] - 'a'] = 1;
maxv = max(maxv, 1ll * s[i] - 'a');
update(i, 1, s[i] - 'a');
}
int l = 0, r = n;
while (l <= r) {
int mid = (l + r) >> 1;
for (int i = 1; i <= mid; i++)
update(p[i], -1, s[p[i]] - 'a');
if (check(mid))
ans = mid, r = mid - 1;
else
l = mid + 1;
for (int i = 1; i <= mid; i++)
update(p[i], 1, s[p[i]] - 'a');
}
printf("%lld", ans);
return 0;
}
T3——Deliver the Cake
Solution
Code
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#define int long long
using namespace std;
using namespace std;
const int MAXN = 2e5 + 5, MAXM = 2e7 + 5, INF = 1e18;
int T;
int n, m, s, t, x;
char a[MAXN], b[MAXN];
int dis[MAXN];
int head[MAXN], nxt[MAXM], ver[MAXM], edge[MAXM], tot;
struct Node {
int v, dis;
bool operator < (const Node o) const {
return dis > o.dis;
}
};
void add(int x, int y, int z) {
nxt[++tot] = head[x], head[x] = tot, ver[tot] = y, edge[tot] = z;
nxt[++tot] = head[y], head[y] = tot, ver[tot] = x, edge[tot] = z;
}
void init() {
for (int i = 1; i <= 2 * n; i++)
head[i] = 0;
tot = 0;
}
int dij(int s) {
for (int i = 1; i <= 2 * n; i++)
dis[i] = INF;
priority_queue<Node> q;
dis[s] = 0;
q.push({s, 0});
Node tmp;
while (!q.empty()) {
tmp = q.top();
q.pop();
int u = tmp.v;
if (tmp.dis > dis[u])
continue;
for (int i = head[u]; i; i = nxt[i]) {
int v = ver[i], w = edge[i] + (b[u] == b[v] ? 0 : x);
if (dis[u] + w< dis[v]) {
dis[v] = dis[u] + w;
q.push({v, dis[v]});
}
}
}
return min(dis[t], dis[t + n]);
}
signed main() {
scanf("%lld", &T);
while (T--) {
scanf("%lld %lld %lld %lld %lld", &n, &m, &s, &t, &x);
init();
scanf("%s", a);
for (int i = 1; i <= n; i++) {
if (a[i - 1] == 'M')
b[i] = 'L', b[i + n] = 'R';
else if (a[i - 1] == 'L')
b[i] = b[i + n] = 'L';
else
b[i] = b[i + n] = 'R';
}
for (int i = 1; i <= m; i++) {
int u, v, w;
scanf("%lld %lld %lld", &u, &v, &w);
add(u, v, w), add(u + n, v, w), add(u + n, v + n, w), add(u, v + n, w);
}
printf("%lld\n", min(dij(s), dij(s + n)));
}
return 0;
}
T4—— Very Easy Graph Problem
Solution
Code
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 2e5 + 5, mod = 1e9 + 7;
int T;
int n, m, cnt;
int color[MAXN];
int u[MAXN], v[MAXN];
int fa[MAXN];
int dfn[MAXN];
bool vis[MAXN];
int num[MAXN][2], sum[2];
int head[MAXN], nxt[MAXN], ver[MAXN], tot;
void Make() {
for (int i = 1; i <= n; i++)
fa[i] = i;
}
int Find(int x) {
return fa[x] == x ? x : fa[x] = Find(fa[x]);
}
void dfs(int u, int fa) {
dfn[u] = ++cnt;
num[u][0] = (color[u] == 0), num[u][1] = (color[u] == 1);
for (int i = head[u]; i; i = nxt[i]) {
int v = ver[i];
if (v == fa)
continue;
dfs(v, u);
num[u][0] += num[v][0], num[u][1] += num[v][1];
}
}
int qpow(int a, int b) {
int res = 1;
while (b) {
if (b & 1)
res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
void add(int x, int y) {
nxt[++tot] = head[x], head[x] = tot, ver[tot] = y;
}
signed main() {
scanf("%d", &T);
while (T--) {
scanf("%d %d", &n, &m);
sum[0] = sum[1] = 0;
for (int i = 1; i <= n; i++) {
scanf("%d", &color[i]);
sum[0] += (color[i] == 0), sum[1] += (color[i] == 1);
}
tot = 0;
memset(ver, 0, sizeof(ver)), memset(head, 0, sizeof(head)), memset(vis, 0, sizeof(vis));
Make();
for (int i = 1; i <= m; i++) {
scanf("%d %d", &u[i], &v[i]);
int x = Find(u[i]), y = Find(v[i]);
if (x != y) {
fa[x] = y, vis[i] = 1;
add(u[i], v[i]), add(v[i], u[i]);
}
}
cnt = 0;
dfs(1, 0);
int ans = 0;
for (int i = 1; i <= m; i++) {
if (!vis[i])
continue;
int fa = u[i], son = v[i];
if (dfn[fa] > dfn[son])
swap(fa, son);
int f = sum[0] - num[son][0], f1 = sum[1] - num[son][1];
ans = (ans + qpow(2, i) * (f * num[son][1] % mod) % mod) % mod;
ans = (ans + qpow(2, i) * (f1 * num[son][0] % mod) % mod) % mod;
}
printf("%lld\n", ans);
}
return 0;
}
本文来自博客园,作者:zhou_ziyi,转载请注明原文链接:https://www.cnblogs.com/zhouziyi/p/16563491.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话