AtCoder Beginner Contest 287(A~E)

news2024/11/18 22:35:22

比赛名称:UNIQUE VISION Programming Contest 2023 New Year (AtCoder Beginner Contest 287)

比赛链接:AtCoder Beginner Contest 287

目录

A - Majority 

B - Postal Card 

C - Path Graph? 

D - Match or Not 

E - Karuta 


A - Majority 

问字符串For 是否比字符串 Against的数量多

#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef long long LL;
signed main(){
  int n;
  cin >> n;
  int cnt1 = 0, cnt2 = 0;
  for(int i = 0; i < n; i++){
    string s;
    cin >> s;
    if(s[0] == 'F') cnt1 ++;
    else cnt2++;
  }
  if(cnt1 > cnt2) cout << "Yes\n";
  else cout << "No\n";
  return 0;
}

B - Postal Card 

给一个字符串长度为6的字符串数组s和一个字符串长度为3的字符串数组t,问si长度为3的字符串后缀是否在t中出现过。

#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef long long LL;
signed main(){
  int n, m;
  cin >> n >> m;

  vector<string> a, b;

  for(int i = 0; i < n; i++){
    string s;
    cin >> s;
    a.push_back(s.substr(3));
  }

  for(int i = 0; i < m; i++){
    string s;
    cin >> s;
    b.push_back(s);
  }

  int cnt = 0;
  for(int i = 0; i < a.size(); i++){
    if(count(b.begin(), b.end(), a[i])){
      cnt++;
    }
  }

  cout << cnt << "\n";
  return 0;
}

C - Path Graph? 

问是否是一个Path Graph

 

 原文传送门...

思路:

这里提供两个思路:

dfs深搜:

首先图中只有两个入度为1的点,而且很显然我们用入度为1的点做为起点,向下dfs深搜,每个点只经过一次,那么我们可以用cnt来记录总共走过了多少个点,很显然我们最后之后走过n个点。

另外还有一个可以优化掉的地方,我们发现满足Path Graph的一定只有n-1个边,所以这里可以小优化一下。

并查集:

我们可以一个Path Graph一定满足以下条件:

  1. 只有一个连通块
  2. 只有两个入度为1,其余均是入度为2
  3. 点数-边数=1

用cnt数组记录各点的入度情况,并查集判断连通块个数即可。

这里附上dfs深搜代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  
  int n, m;
  cin >> n >> m;

  vector<vector<int>> g(n);
  vector<int> cnt(n);
  vector<bool> vis(n, false);

  for(int i = 0; i < m; i++){
    int a, b;
    cin >> a >> b;
    a--, b--;
    cnt[a]++, cnt[b]++;
    g[a].push_back(b);
    g[b].push_back(a);
  }

  if(m != n - 1){
    cout << "No\n";
    return 0;
  }

  int res = 0;
  function<void(int)> dfs = [&](int x){
    res++;
    vis[x] = true;
    for(auto i : g[x]){
      if(vis[i]) continue;
      dfs(i);
      return ;
    }
  };

  for(int i = 0; i < n; i++){
    if(cnt[i] == 1){
      dfs(i);
      if(res == n) cout << "Yes\n";
      else cout << "No\n";
      return 0;
    }
  }
  cout << "No\n";
  return 0;
}

D - Match or Not 

两个只有?和小写字母组成的字符串s和t,其中?可以做为任意字符

现在有x<=|t|,现在问从字符串s中把长度为x的前缀和长度为|t| − x的后缀拼起来,能否与字符串t相等。

思路:

很简单,我们可以分别找到t与s的最长公共前缀和最长公共后缀,两者拼接后只要当前长度的前缀和后缀在没超过 最长公共前缀和最长公共后缀即可。

#include <bits/stdc++.h>
using namespace std;
int main(){
  string s, t;
  cin >> s >> t;

  int x = 0;
  for(int i = 0; i < t.size(); i++){
    if(s[i] == t[i]) x ++;
    else if(s[i] == '?' || t[i] == '?') x++;
    else break;
  }

  int y = 0;
  for(int i = s.size() - 1, j = t.size() - 1; i >= 0 && j >= 0; i--, j--) {
    if(s[i] == t[j]) y++;
    else if(s[i] == '?' || t[j] == '?') y++;
    else break; 
  }

  for(int i = 0; i <= t.size(); i++){
    if(i <= x && t.size() - i<= y) cout << "Yes\n";
    else cout << "No\n";
  }

  return 0;
}

E - Karuta 

给一个字符串数组分别问每个字符串与其他字符串的最大公共前缀。

很显然,字典树(Trie)模板题,对所有的串(包括字符串与其子串)建Trie,然后查询的时候只用查到计数为1的字符串这时候就是最大公共前缀。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int son[N][26], cnt[N], idx;
string s[N];

void insert(const char *s){
  int p = 0;
  for(int i = 0; s[i]; i++){
    int j = s[i] - 'a';
    if(!son[p][j]) son[p][j] = ++idx;
    p = son[p][j];
    cnt[p]++;
  }
}


int query(const char *s){
  int p = 0;
  int ans = 0;
  for(int i = 0; s[i]; i ++){
    int j = s[i] - 'a';
    p = son[p][j];
    if(cnt[p] == 1) return ans;  
    ans++;
  }
  return ans;
}

int main(){
  int n;
  cin >> n;

  for(int i = 1; i <= n; i++){
    cin >> s[i];
    insert(s[i].c_str());
  }

  for(int i = 1; i <= n; i++){
    cout << query(s[i].c_str()) << "\n";
  }

  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工作和学习中都能用到的5款实用软件

如今&#xff0c;工作和学习都离不开电脑&#xff0c;所以电脑里的软件自然也是必不可少的&#xff0c;但是电脑软件那么多&#xff0c;不可能每个都装上吧&#xff0c;所以我们要装好用的、实用的&#xff0c;下面给大家分享5款好用到爆的软件&#xff0c;很多懂电脑的人都在用…

【算法】雪花算法

一.特点 1.全局唯一性&#xff1a;对于大数据量的分库分表场景&#xff0c;例如水平分表需要保证主键id的全局唯一性。 2.趋势递增&#xff1a;整体的id趋势是递增的&#xff0c;不是单调递增。 3.不规则性&#xff1a;id不连续&#xff0c;无规则&#xff0c;不规则。 4.包含…

乾元通多卡聚合通信设备保障生态环境监测网络

针对目前城市大气环境监测网格化建设&#xff0c;推出的新一代城市网格化大气环境监测系统&#xff0c;可以实现城市区域环境多维一体化监测管理&#xff0c;该设备主要用于监测大气环境中的PM10、TSP、PM2.5等颗粒物浓度&#xff0c;还可以实现环境监控&#xff0c;测噪音、大…

Node.JS 安装配置 | 安装排错解析

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Node.js下载 Node.js官方下载地址 官方下载如果慢&#xff0c;请用如下地址下载&#xff1a; Node.js 中文网 根据自己计算机配置下载 Next Next 安装地址可更换 Next…

年后找工作必看的自动化测试面试宝典,一般人我不告诉他

目录 前言 1.1 什么是 API&#xff1f; 1.2 什么是 API 测试&#xff1f; 1.3 常见的 API 测试类型有哪些&#xff1f; 1.4 列举 API 测试中使用的一些常用协议&#xff1f; 1.9API 常见测试有哪些&#xff1f; 1.10API 测试有哪些优势&#xff1f; 1.11API 测试中究竟…

【PHP 随记】—— Composer 安装项目以及项目的扩展

&#x1f449;总目录&#x1f448;\large\colorbox{skyblue}{&#x1f449;总目录&#x1f448;}&#x1f449;总目录&#x1f448;​ 文章目录1、Composer 安装项目① 项目安装示例② 相关问题解决③ 框架搜索指南2、Composer 安装项目的扩展使用 Composer 更轻松方便地安装 P…

RV1126笔记二十五:区域入侵检测

若该文为原创文章,转载请注明原文出处。 一、 前言 区域入侵检测是通过识别目标之后获取目标坐标位置,判断目标是否在所标定的区域内出现,常常被用在电子围栏,不安全区域入侵检测,智慧城市,安防监控等领域。具体使用场景有,在标定的区域内不能抽烟,进入工地区域必须佩…

Java快速上手Properties集合类

概念 Java中的Properties文件是一种配置文件&#xff0c;主要用于表达配置信息&#xff0c;格式是文本文件。该类主要用于读取Java的配置文件&#xff0c;也可以对properties文件进行修改 属性配置&#xff1a;以“键值”的方式书写一个属性的配置信息 注 释&#xff1a;在pro…

我建议大学生看一下阿凡达2,对离校后很有帮助

网上评价阿凡达2说剧情拉胯&#xff0c;但我却通过他的剧情看到了当代大学生的一些影子&#xff0c;尤其是对于离校的毕业生来说&#xff0c;相对吻合的场景还是很多的&#xff0c;让我来分析一下。 目录 阿发达2关键剧情点 1、在校期间 2、终于要离校了 3、离开学校&…

Flutter 安装踩坑记录 HTTP host https://pub.dev/ is not reachable.

Flutter安装踩坑记录安装Flutter SDK参考链接安装Flutter SDK Windows安装 flutter官网下载flutter sdk包 2.解压到C盘除去program file相关的目录&#xff08;最好自己创建一个新的目录&#xff0c;因为放在program file等目录需要特殊的权限&#xff0c;会出现问题&#xf…

【解读】CSA CISO研究报告: 零信任的部署现状及未来展望

零信任理念已经存在了十多年。然而对需要保护IT系统的企业来说&#xff0c;这个术语及其实施方式的关注度显著增加。 国际云安全联盟CSA发布调研报告《CISO研究报告&#xff1a;零信任的部署现状及未来展望》&#xff0c;本次调研的目的是使大家更好地理解组织机构内部的零信任…

【My Electronic Notes系列——放大电路与集成运算放大器】

目录 序言&#xff1a; &#x1f3c6;&#x1f3c6;人生在世&#xff0c;成功并非易事&#xff0c;他需要破茧而出的决心&#xff0c;他需要永不放弃的信念&#xff0c;他需要水滴石穿的坚持&#xff0c;他需要自强不息的勇气&#xff0c;他需要无畏无惧的凛然。要想成功&…

电脑怎么录制视频?如何录制页面上指定区域

你知道电脑怎么录制视频吗&#xff1f;有时候我们并不需要录制整个电脑屏幕&#xff0c;只需要对特定区域&#xff0c;这个时候该怎么办呢&#xff1f;其实我们只需要一款既支持全屏录制又支持区域录制的录屏工具&#xff0c;就可以轻松搞定。下面小编教您如何录制电脑上指定的…

azg携手Bubs出席2022未来母婴大会主题专场,探讨母婴品牌长红发展路径

近日&#xff0c;由母婴行业观察主办的“2022第八届未来母婴大会”在上海成功举办&#xff0c;来自行业内的近百位资深嘉宾受邀参与&#xff0c;共襄盛会。而在以“新周期 新机遇&#xff0c;母婴品牌可持续生长路径”的2022未来母婴大会主题专场中&#xff0c;Bubs中国区资深渠…

梦熊杯-十二月月赛-白银组题解-D.智慧

D. Problem D.智慧&#xff08;wisdom.cpp&#xff09; 内存限制&#xff1a;256 MiB 时间限制&#xff1a;1000 ms 标准输入输出 题目类型&#xff1a;传统 评测方式&#xff1a;文本比较 题目描述: 「须弥」是「智慧」的国度。 布耶尔认为&#xff0c;如果能只使用加…

CTFshow--web--红包题第七弹

好家伙&#xff0c;一打开就是个phpinfo&#xff0c;看看了感觉暂时没有什么利用的东西&#xff0c;扫一下目录吧使用dirsearch扫描&#xff0c;发现/.git/index的一个目录文件&#xff0c;访问下载他python dirsearch.py -u "http://98c1d213-ce9d-4415-99b1-2b4f2c80430…

java 探花交友项目day5 推荐好友列表 MongoDB集群 发布动态,查询动态 圈子功能

推荐好友列表 需求分析 推荐好友&#xff1a;分页形式查询推荐的用户列表&#xff0c;根据评分排序显示 代码实现&#xff1a; tanhuaController: /** * 查询分页推荐好友列表 */ GetMapping("/recommendation") public ResponseEntity recommendation(Recomme…

回归模型评价指标原理与基于sklearn的实现

1 前言 回归任务是机器学习中常见的任务&#xff0c;特别是涉及到具体的发电量预测、风力预测等工业任务时&#xff0c;有非常多的应用场景。回归任务不同于分类任务&#xff0c;回归任务的预测值一般是连续的数&#xff0c;分类任务的预测值则是离散的值&#xff08;比如0、1分…

ssh2.js+Shell一套组合拳下来,一年要花2080分钟做的工作竟然节省到52分钟~

前言 进入了新的一年&#xff0c;团队被分配了新的工作内容——每周巡检。 巡检工作简单&#xff0c;但需要人工重复性地登陆远程服务器、输入重复的命令&#xff0c;然后将命令的结果记录下来。每做一次估计花40分钟&#xff0c;但要每周做&#xff0c;一年52周&#xff0c;…

Java---微服务---分布式搜索引擎elasticsearch(3)

分布式搜索引擎elasticsearch&#xff08;3&#xff09;1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现2.自动补全2.1.拼音分…