首页 > 其他分享 >LVJR2 赛后题解

LVJR2 赛后题解

时间:2023-05-06 16:11:27浏览次数:42  
标签:LVJR2 int 题解 赛后 fa cdots MAXN read find

赛后补题请到 洛谷比赛

A

考虑分类讨论。显然当 \(a=0,b=0\) 时,答案等于 \(0\)。

  1. 当 \(a=0\) 或 \(b=0\) 时,直接将等于 \(0\) 的数乘以一个很大的数字,将不等于零的数除以一个很大的数字,答案为 \(v\)。
  2. 当 \(a,b\) 均不为 \(0\) 时,可以选择先将一个数字减到 \(0\),或将一个数字除到 \(0\),答案为 \(\min(u+v,2\times v)\)。
signed main()
{
    a = read() , b = read() , u = read() , v = read();
    if (a == 0 && b == 0) puts("0") , exit(0);
    if (a == b) cout << min(u,v * 2) << endl , exit(0);
    if (a == 0 || b == 0) cout << v << endl , exit(0);
    cout << min(u + v,v * 2) << endl;
    return 0;
}

代码来自选手 ybm。

B

考虑在什么情况下,DFS 有可能出错。显然,当且仅当这个图带环的时候,DFS 会求错最短路,于是直接使用并查集判断 \(1\) 所在的连通块 是否有环即可。

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

const int MAXN = 5e4 + 5; 
int n, m, T, fa[MAXN];

int find(int x) {
	if (fa[x] == x) return x;
	else return fa[x] = find(fa[x]);
} 

int main(void) {
	cin >> T;
	while (T--) {
		cin >> n >> m;
		for (int i = 1; i <= n; ++i) fa[i] = i;
		bool flag = 1;
		for (int i = 1; i <= m; ++i) {
			int u, v, fu, fv;
			cin >> u >> v;
			fu = find(u), fv = find(v);
			if (fu == fv && fu == find(1)) flag = 0;
			else fa[fu] = fv;
		}
		if (flag) cout << "1.000" << endl;
		else cout << "0.000" << endl; 
	}
}

C

考虑 DP。设 \(f_{i,j}\) 表示 \(b_{1\cdots i}\) 包含 \(g_{1\cdots j}\) 的最小代价,于是我们有如下转移。

  1. 当 \(i<j\) 时,\(f_{i,j}=\inf\)。
  2. 当 \(b_i=g_j\) 时,\(f_{i,j}=f{i-1,j-1}\)。
  3. 当 \(b_i\ne g_j\) 时,\(f_{i,j}=\min(f_{i-1,j-1}+1,f_{i-1,j})\),分别表示将 \(b_i\) 改为 \(g_j\) 或 让 \(b_{1\cdots i-1}\) 包含 \(g_{1\cdots j}\)。
    边界情况为 \(f_{i,0}=0\)。
#include <bits/stdc++.h>
using namespace std;
#define MAXN 1010
char s1[MAXN], s2[MAXN];
int ans, f[MAXN][MAXN];
int n, m;
int main()
{
    cin >> (s1 + 1) >> (s2 + 1);
    n = strlen(s1 + 1);
    m = strlen(s2 + 1);
    f[0][0] = 0;
    for (int i = 1; i <= n; i++)
    {
        f[i][0] = 0;
        for (int j = 1; j <= min(i, m); j++)
        {
            if (s1[i] == s2[j])
                f[i][j] = f[i - 1][j - 1];
            else
                f[i][j] = f[i - 1][j - 1] + 1;
            if (i > j)
                f[i][j] = min(f[i][j], f[i - 1][j]);
        }
    }
    printf("%d\n", f[n][m]);
    return 0;
}

代码来自选手 lyk。

D

显然,这个题可以转换为如下

标签:LVJR2,int,题解,赛后,fa,cdots,MAXN,read,find
From: https://www.cnblogs.com/XiaoQuQu/p/17377681.html

相关文章

  • [Luogu-P1007]题解(C++)
    PartIPreface原题目(Luogu)PartIISketch给定一个正整数\(L\),表示独木桥长度。给定一个正整数\(N\),表示桥上士兵的数量。给定\(N\)个整数,分别表示每个士兵的坐标。规定走到\(0\)坐标或\(L+1\)的位置为下桥,两个士兵相遇时不能走过去,他们会各自回头走。求出所有士......
  • 【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(一)
     【前提简介】本文档主要总结HarmonyOS开发过程中可能遇到的一些问题解答,主要围绕HarmonyOS展开,包括但不限于不同API版本HarmonyOS开发、UI组件、DevEcoStudio、Gitee示例代码等,并将持续更新哦。 【官方FAQ】【FAQ】HarmonyOS应用及服务开发常见问题汇总(官方总结,持续更新):ht......
  • [AtCoder-AT_ABC108_B]题解(C++)
    PartIPreface原题目(Luogu)原题目(AtCoder)PartIISketchPartIIIAnalysis观察这道题,我们很容易想到,必须推导出\(x1,y1,x2,y2\)与\(x3,y3,x4,y4\)之间的关系。我们观察下图。可以发现:\(\begin{aligned}\begin{cases}x3=x2-(y2-y1)\\y3=y2+(x2-......
  • [CodeForces-143A]题解(C++)
    PartIPreface原题目(Luogu)原题目(CodeForces)PartIISketch设有一个\(2\times2\)的棋盘,上面可以填入\(1-9\)的数字。给出\(6\)个数字,为每行每列以及每个对角线上的数字之和,求相应的摆放方式,无解输出\(-1\)。PartIIIAnalysis观察此题数据规模,不难发现数据......
  • [CodeForces-1104A]题解(C++)
    PartIPreface原题目(Luogu)原题目(CodeForces)PartIISketch给定一个整数\(n\)。将\(n\)拆分成一个数列\(a_1,a_2,a_3,\dots,a_m\)。使得\(\sum\limits_{k=1}^{m}a_k=n\),每个\(a_i\in[0,9]\)且数列中不相同的数的数量尽量少。PartIIIAnalysis我们很容易......
  • 【模板】堆 题解
    题目传送门一道小根堆模板题。在做这道题之前,我们先介绍一下小根堆是什么。我们定义小根堆是一种对于任何一个父结点的权值总是小于或等于子节点权值的完全二叉树。因此,不难看出,一个小根堆的堆顶(这棵树的根节点)应该是这个堆(树)中权值最小的结点。简单介绍完了小根堆,我们再介绍......
  • 【ABC298C】题解
    思路一道很好的复习数据结构的题。对于第\(1\)个问答(既第\(2\)种操作),我用一个小根堆(优先队列,\(\text{priority\_queue}\))来储存第\(i\)个盒子的卡牌。对于第\(2\)个问答(既第\(3\)种操作),我用一个\(\text{set}\)来储存编号为\(i\)个卡牌在哪些盒子里。由于\(\tex......
  • 【学习笔记】【题解】树形依赖 DP 选做
    地址:https://www.cnblogs.com/FReQuenter5156/p/shuxingyilaidp.html/简介这类背包本质上是分组背包问题。将一个节点的每一棵子树看作一组,进行分组背包。所谓分组背包,即在选择物品的时候,一开始将物品分为好几组,在选择时,可以从每一组中至多选择一件物品,问如何获得最大的价值,所......
  • CF338D GCD Table-题解(excrt)
    CF338DGCDTable个人评价:还好算法扩展CRT题面给了一张\(n\timesm\)的矩阵,第i行j列的权值是gcd(i,j),现在有一个长度为k的序列A,问是否存在(i,j)使得\(gcd(i,j+l-1)=a_l(1\leql\leqk)\)问题分析我们将对应行设为x,对应列设为y,那么就有如下同余方程组\(x\equiv(y+l-1)......
  • P8446 虹色的北斗七星 题解
    传送门前言:很久之前做的一道题目了,当时并没有想出来怎么做,随便猜了个结论交上去发现过了。(好像还是第一道自己做出来的绿)简要题意:你有一个长度为\(n\)的序列\(a\),一个区间\([l,r]\)的价值定义为当前区间的极差减去区间长度,求出最大的价值。\(Solution\):看了看题解,发现......