首页 > 其他分享 >[CodeForces] CF21 题解

[CodeForces] CF21 题解

时间:2024-11-24 11:12:05浏览次数:6  
标签:regex frac 16 CF21 题解 leq CodeForces 正则表达式 匹配

这次不放难度了。因为我懒

A. Jabber ID

【题目大意】

一个地址由 <username>@<hostname>[/resource] 组成,其中 [/resource] 可以被省略。

  • <username> 字段允许大写、小写字母,数字、下划线,其长度应在 \(1\) 到 \(16\) 之间。
  • <hostname> 字段允许用 . 来分隔。每一段的要求同 <username> 字段,分隔出的每一部分长度在 \(1\) 到 \(16\),<hostname> 字段的总长度在 \(1\) 到 \(32\) 之间。
  • <resource> 字段要求同 <username> 字段。

给出一个地址,询问是否合法。

【解题思路】

正则表达式:

分别匹配以下两个正则表达式:

  • ^\w{1,16}@\w{1,16}(\.\w{1,16})*(\/\w{1,16})?$
  • ^\w{1,16}@((\w|\.){1,32})(\/\w{1,16})?$

这里需要两个匹配都成功(事实上,这题数据过水,你只匹配第一个正则表达式也能通过)。

解释:

  • ^$ 分别表示字符串的开始和结束。
  • \w 表示字母、数字、下划线。
  • {a, b} 表示匹配最少 \(a\) 个字符,最多 \(b\) 个。
  • @\.\/ 分别表示字符 @./。后两者加 \ 是因为 ./ 在正则表达式中有特殊意义。
  • * 表示可以匹配任意次
  • ? 表示可以匹配 \(0\) 次或者 \(1\) 次。
  • a|b 表示匹配 ab。这里,ab 均表示字符串。

注意,在 C++ 中,\ 有特殊意义,需要在前面再加一个 \,变为 \\。这样,正则表达式变为:

  • ^\\w{1,16}@\\w{1,16}(\\.\\w{1,16})*(\\/\\w{1,16})?$
  • ^\\w{1,16}@((\\w|\\.){1,32})(\\/\\w{1,16})?$

使用方法:

  • regex() 表示一个正则表达式,() 内填上面的正则表达式。变量类型是 regex。当然,也可以用 regex 声明一个正则表达式类型的变量。
  • regex_match(string, regex) 匹配成功返回 true,失败返回 falsestring 表示字符串类型,regex 表示正则表达式类型。

示例:

#include <iostream>
#include <regex>
using namespace std;

int main() {
    string str = "123456";
    regex pattern("\\w");
    bool match1 = regex_match(str, pattern);
    bool match2 = regex_match(str, regex("\\w*"));
    cout << (match1 ? "YES" : "NO") << endl;
    cout << (match2 ? "YES" : "NO") << endl;
    return 0;
}

输出:

NO
YES 

(因为第一个正则表达式 \w 没加表示可以匹配任意次的 *。)


B. Intersection

【题目大意】

给定两个一次函数 \(A_1 x + B_1 y + C_1 = 0\) 和 \(A_2 x + B_2 y + C_2 = 0\),输出两个一次函数的交点个数,如果有无穷个交点,则输出 -1

  • 输入的数均为绝对值不超过 \(100\) 的整数。

【解题思路】

两直线平行的条件是 \(\frac{A_1}{B_1} = \frac{A_2}{B_2}\) 且 \(\frac{C_1}{B_1} \neq \frac{C_2}{B_2}\)。

两直线重合的条件是 \(\frac{A_1}{B_1} = \frac{A_2}{B_2}\) 且 \(\frac{C_1}{B_1} = \frac{C_2}{B_2}\)。

前者输出 0,后者输出 -1,其他输出 1

注意特判 \(B_1 = 0\) 或 \(B_2 = 0\) 的情况。

这题还有 \(A_1 = 0\),\(B_1 = 0\) 或者 \(A_2 = 0\),\(B_2 = 0\) 的情况,也需要特判(也就是说,有可能输入的一次函数表示一个平面或者是空集,不愧是 CF 的出题人,真是良苦用心啊)。


C. Stripe 2

【题目大意】

给出一个长度为 \(n\) 的序列 \(a\),问有多少种方案将序列 \(a\) 划分为恰好连续的三段(每个元素都属于某一段),使得每一段的和都相等。

  • \(1 \leq n \leq 10^5\),\(0 \leq \lvert a_i \rvert \leq 10^4\)。

【解题思路】

先对 \(a\) 做前缀和,设前缀和数组为 \(s\)。

如果 \(s_n \bmod 3 \neq 0\),那显然不成立,输出 0

否则,如果找到了一个 \(s_i\),使得 \(s_i = \frac{2 \times s_n}{3}\),那么它对答案的贡献是满足 \(s_j = \frac{s_n}{3}\) 的小于 \(i\) 的 \(j\) 的数量。

形式化地,记答案为 \(Ans\),则有

\[Ans = \sum_{i=1}^{n-1} [s_i = \frac{2 \times s_n}{3}] \times \sum_{j=1}^{i-1}[s_j=\frac{s_n}{3}] \]


D. Traveling Graph

【题目大意】

给定一个有 \(n\) 个顶点,\(m\) 条边的带边权无向图,要求从顶点 \(1\) 开始经过每一条边至少一次最后回到起点 \(1\) ,要求走过的边权值总和最小。注意:可能有重边和自环。

若无解则输出 -1

  • \(1 \leq n \leq 15\),\(1 \leq m \leq 2000\)。

【解题思路】

不会,咕了。

标签:regex,frac,16,CF21,题解,leq,CodeForces,正则表达式,匹配
From: https://www.cnblogs.com/Eliauk-FP/p/18565554

相关文章

  • LeetCode题解:29.两数相除【Python题解超详细,位运算、二分查找法、递归法】,知识拓展:位
    题目描述        给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。返回被除数 dividend 除以除数 div......
  • 【CodeForces训练记录】CodeTON Round 9 (Div. 1 + Div. 2, Rated, Prizes!)
    训练情况赛后反思发现自己越来越能猜结论了,连续两题结论猜对了,一把rating上青了。A题构造一个数组使得模数互不相同,考虑构造一个模数为\([0,1,2,3,4,5]\)的数列,所以一个全是奇数的数列\([1,3,5,7,9]\)符合条件,直接输出\(1\simn\)的奇数即可。#include<bits/stdc++.......
  • 【题解】CF2031
    Atag:签到题注意到定住一个值后,左边的值全都得改,右边的值也全都得改注意到,定住的越多,需要改的就越少所以开桶记一下哪个值最多就行Btag:诈骗诈骗签到题读完题容易产生naive结论:当且仅当错位的两个地方相邻可以修复,其余情况全部无法修复感觉真不了一点,于是找三个数ABC......
  • 读数据质量管理:数据可靠性与数据质量问题解决之道13数据沿袭
    1. 数据沿袭1.1. MyDoom的病毒1.2. 现在,许多团队甚至整个公司都在使用数据,这要求数据管理的方式要更便于合作,同时也更不容许发生错误1.3. 从采用dbt和ApacheAirflow等开源工具来实现数据转换和编排,到使用Snowflake和Databricks等云端数据仓库和数据湖1.4. 数据仪表板和......
  • ybtoj 高效进阶题解索引
    密码:sunxuhetai2009--------------------云落的分割线--------------------基础算法第1章-递推算法第2章-贪心算法第3章-二分算法第4章-深搜算法第5章-广搜算法已完结--------------------云落的分割线--------------------图论第1章-并查集第4章-强连......
  • 攻防世界 web(新手模式)题解
    1.view_source题目描述:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。根据题目提示直接F12查看源代码,发现答案就在源代码里2.get_post题目描述:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?根据提示,我们需要用GET方式提......
  • 题解:AT_abc381_c [ABC381C] 11/22 Substring
    显然这个“11/22Substring”是以那个“/”为中心对称的。鉴于一个这样的字符串只能有一个“/”,而题目又要求最长,所以确定了“/”就能确定一个满足要求的子串。那思路就很简单了,只有两步:找到所有的“/”两边同时寻找相应的子串。别的,除了判断一下越界之外,就不用管了。......
  • [题解](更新中)[test06]2024/11/23 模拟赛 / 2023牛客OI赛前集训营-提高组(第三场) A~C
    原题页面:https://ac.nowcoder.com/acm/contest/65194Statements&Solution:https://www.luogu.com.cn/problem/U507978\(80+80+50+24=234\)。A贪心+双指针。根据贪心思想,大值选大、小值选小。我们按绝对值从大到小给\(a\)排序,再按从小到大给\(b\)排序,取双指针\(l=1,r=m\)......
  • 题解 - Birds
    题目题目大意一条直线上有\(n\)棵树,第\(i\)棵树上有\(c_i\)​只鸟。在第\(i\)棵树下召唤一只鸟的魔力代价是\(cost_i\)​。每召唤一只鸟,魔力上限会增加\(B\)。每向前走一棵树,会增加\(X\)的魔力。一开始的魔力和魔力上限都是\(W\)。你只能向前移动。问最多能够召......
  • 题解:CF1970E1 Trails (Easy)
    基本思路设\(dp_{i,j}\)为第\(i\)天时在第\(j\)个小屋的方案数,\(r_j\)为第\(j\)个小屋共有多少条路连接(即\(s_j+l_j\))。易得转移方程为\[dp_{i,j}=\sum_{k=1}^{m}dp_{i-1,k}\cdot(r_j\cdotr_k-l_j\cdotl_k)\](因为至少走一条短路,所以减去全长路的情况)代码实现......