AtCoder Beginner Contest 391(ABCDE)

news2025/2/2 22:22:34

A - Lucky Direction

翻译:

        给你一个字符串 D,代表八个方向(北、东、西、南、东北、西北、东南、西南)之一。方向与其代表字符串之间的对应关系如下。

  • 北:   N
  • 东:   E
  • 西:  W
  • 南:  S
  • 东北方 :NE
  • 西北: NW 
  • 东南: SE 
  • 西南: SW

        打印与 D 表示的方向相反的字符串。

思路:

使用map对应即可

实现:

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

int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    map<string,string> mp;
    mp["N"] = "S";
    mp["S"] = "N";
    mp["E"] = "W";
    mp["W"] = "E";
    mp["NE"] = "SW";
    mp["SW"] = "NE";
    mp["NW"] = "SE";
    mp["SE"] = "NW";
    string s;
    cin>>s;
    cout<<mp[s]<<endl;
}

B - Seek Grid

 翻译:

        给你一个 N×N 网格 S 和一个 M×M 网格 T。从上往下第 i 行和从左往右第 j 列的单元格用 (i,j) 表示。

        S 和 T 中单元格的颜色用 N^{2}个字符 S_{i,j}(1≤i,j≤N)表示和 M^{2}个字符 T_{i,j}(1≤i,j≤M)来表示。在网格 S 中,如果 S_{i,j} 为 '. ',则单元格 (i,j) 为白色;如果 S_{i,j} 为 '#',则单元格 (i,j) 为黑色。网格 T也相同

        找到S内的T。更准确地说,输出满足以下条件的整数 a 和 b(1≤a,b≤N-M+1):

  • S_{a+i-1,b+j-1}=T_{i,j}对于i,j来说 i,j (1≤i,j≤M).

思路:

以S中(a,b)为右上角遍历M*M的网格,判断是否相同。

实现:

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

void solve(){
  int n,m;
  cin>>n>>m;
  vector<string> S(n),T(m);
  for (int i=0;i<n;i++){
    cin>>S[i];
  }
  for (int i=0;i<m;i++){
    cin>>T[i];
  }
  for (int a=0;a<=n-m;a++){
    for (int b=0;b<=n-m;b++){
      // judge same
      int f = 1;
      for (int i=0;i<m;i++){
        if (!f) break;
        for (int j=0;j<m;j++){
          if (T[i][j]!=S[a+i][b+j]){
            f = 0;
            break;
          }
        }
      }
      if (f){
        cout<<a+1<<" "<<b+1<<endl;
        return;
      }
    }
  }
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    solve();
}

C - Pigeonhole Query

 翻译:

        有N 只鸽子,编号从1 到N,还有N 个巢,编号从1 到N。最初,鸽子i 在巢i 中,其中
1≤i≤N。

        你将收到Q 个查询,需要按顺序处理。查询有两种类型,每种查询的格式如下:

  • 1 P H:将鸽子P 移动到巢H。
  • 2:输出包含多于一只鸽子的巢的数量。

思路:

        用两个数组(nests,pigeon)分别记录,nests[i]记录巢i中有几只鸽子,pigeon[i]记录鸽子i在哪个巢穴中。

实现:

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


int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    int n,q,f,p,h,res = 0;
    cin>>n>>q;
    vector<int> nests(n+1,1),pigeon(n+1);
    for (int i=0;i<=n;i++) pigeon[i] = i;
    while (q--){
      cin>>f;
      if (f==1){
        cin>>p>>h;
        // move p
        if (nests[pigeon[p]]-- ==2){
          res -= 1;
        }
        pigeon[p] = h;
        if (nests[pigeon[p]]++ == 1){
          res += 1;
        }
      }else if (f==2){
        cout<<res<<endl;
      }
    }
}

 D - Gravity

翻译:

        有一个 10^{9} 行 W 列的网格。左起第 x 列和下起第 y 行的单元格用 (x,y) 表示。

        共有 N 个图块。每个区块是 1×1 的正方形,第 i 个区块(1≤i≤N)在 0 时刻位于单元格(X_{i},Y_{i})

        在 t=1,2,...,10^{100} 时,区块按照以下规则移动:

  • 如果整个底行都布满了图块,则移除底行的所有图块。
  • 对于剩余的每个区块,按照从下到上的顺序,执行以下操作:
    • 如果该图块位于最下面一行,或者它下面的单元格中有一个图块,则不做任何操作。
    • 否则,将该图块向下移动一格。

给您 Q 个查询。对于第 j 个查询 (1≤j≤Q),请回答区块 A j 在时间 T_{j}+0.5.
 

思路: 

        预处理答案。

        哪些块一定会消失?会构成底行都为图块的块。那么先就求会消掉的层数,即每列的最少块数。

        那么最后会处于同一行的什么时候消失呢?这个由最终同行的最高点决定。

        不消失的块则一直存在。

实现:

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

void solve(){
  ll n,w;
  cin>>n>>w;    
  // block_down_time[i]:第i块在哪个时间点消失
  vector<ll> block_down_time(n+1,-1);
  // down_block[i]:第i列中包含的块(块所处高度,第几块)
  vector<vector<pair<ll,ll>>> down_block(w+1);
  for (ll x,y,i=1;i<=n;i++){
    cin>>x>>y;
    down_block[x].emplace_back(y,i);
  }
  // 有几行可被移除
  ll can_removes = INT_MAX;
  for (ll i=1;i<=w;i++){
    sort(down_block[i].begin(),down_block[i].end());
    can_removes = min(can_removes,(ll)down_block[i].size());
  }

  // 遍历消失的行,得到最终相同行的消失时间
  for (ll i=1;i<=can_removes;i++){
    ll need_time = 0;
    for (ll j=1;j<=w;j++){
      need_time = max(need_time,down_block[j][i-1].first);
    }
    for (ll j=1;j<=w;j++){
      block_down_time[down_block[j][i-1].second] = need_time;
    }
  }

  // query
  ll q,t,a;cin>>q;
  while (q--){
    cin>>t>>a;
    // 不会消失 或 还没到消失的点
    if (block_down_time[a]==-1 || block_down_time[a]>t){
      cout<<"Yes"<<endl;
    }else{
      cout<<"No"<<endl;
    }
  }
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    solve();
}

E - Hierarchical Majority Vote

翻译:

        对于长为3^{n}的二进制字符串B=B_{1}B_{2}...B_{3^{n}}我们定义一个如下操作得到一个长为3^{n-1}的二进制字符串C=C_{1}C_{2}...C_{3^{n-1}}

  •         将B的元素分为三组并得到每个组中的主要值。也就是对于i=1,2,...,3^{n-1},让C_{i}B_{3i-2},B_{3i-1},B_{3i}中出现最频繁的值。

        你被给予 对于长为3^{N}的二进制字符串A=A_{1}A_{2}...A_{3^{N}}。. 设 A ′ =A_{1}′ 是对 A 进行 N 次上述操作后得到的长度为 1 的字符串。

        确定A中最少要改变多少元素使得A_{1}^{'}的值改变。

思路:

      以010011101为例

        010 011 101        第2层

            0   1    1        第1层

                1            第0层

       定义dfs( i, j )为第i层的第j块改变为A_{1}^{'}反转值(下面都叫最终值),所要用的元素数量。

       如果当前 j 块下的3个块中有2个k1, k2与最终值不同,则min( dfs(i+1 , k1), dfs( i+1, k2))

       如果当前 j 块下的3个块中有3个k1, k2,k3与最终值不同,则

        min( dfs(i+1 , k1)+dfs( i+1, k2), dfs(i+1 , k2)+dfs( i+1, k3), dfs(i+1 , k3)+dfs( i+1, k1))

        终止条件为i>=n返回1表示当前块要改。

实现:

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

void solve(){
  int n;
  string s;
  cin>>n;
  cin>>s;
  //colors[i][j]:第i层的第j块的颜色
  vector<vector<int>> colors(n+1);

  // 得到每层每块改变前的颜色
  for (char c:s) colors[n].push_back(c-'0');
  for (int i=n-1;i>=0;i--){
    for (int j=0;j<pow(3,i);j++){
      int cnt1 = 0,cnt0 = 0;
      for (int z=3*j;z<3*j+3;z++){
        if (colors[i+1][z]==1) cnt1++;
        else cnt0++;
      }
      colors[i].push_back(cnt1>cnt0 ? 1 : 0);
    }
  }

  // need:最终值
  int need = colors[0][0]^1;
  // memo[i][j]:第i层第j块中最少要改变的块数
  vector<vector<int>> memo(n+1);
  // 初始化memo
  for (int i=0;i<=n;i++) memo[i].resize(pow(3,i),-1);

  auto dfs = [&](auto&& dfs,int i,int j)->int{
    if (i>=n) return 1;

    int& res = memo[i][j];
    if (res!=-1) return res;
    res = INT_MAX;
    
    // cnt_need:有几个与最终值不同的
    int cnt_need = 0,base = 3*j;
    for (int k=base;k<base+3;k++){
      if (colors[i+1][k]!=need) cnt_need++;
    } 
    if (cnt_need==2){
      for (int k=base;k<base+3;k++){
        if (colors[i+1][k]!=need) res = min(res,dfs(dfs,i+1,k));
      }
    }else if (cnt_need==3){
      for (int k1=base;k1<base+3;k1++){
        for (int k2 = k1+1;k2<base+3;k2++){
          if (colors[i+1][k1]!=need && colors[i+1][k2]!=need){
            res = min(res,dfs(dfs,i+1,k1)+dfs(dfs,i+1,k2));
          }
        }
      }
    }
    return res;
  };
  cout<<dfs(dfs,0,0)<<endl;
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // 不使用科学计数法
    // cout<<fixed;
    // 中间填保留几位小数,不填默认
    // cout.precision();
    solve();
}

有建议可以评论,我会积极改进qwq。

codeforces比赛时间十点左右的场基本不会当天写了,atcoder有的话基本会写。

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

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

相关文章

MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译

感谢阅读 注意不含评估以后的翻译原论文地址标题以及摘要介绍部分MiniRAG 框架2.1 HETEROGENEOUS GRAPH INDEXING WITH SMALL LANGUAGE MODELS2.2 LIGHTWEIGHT GRAPH-BASED KNOWLEDGE RETRIEVAL2.2.1 QUERY SEMANTIC MAPPING2.2.2 TOPOLOGY-ENHANCED GRAPH RETRIEVAL 注意不含评…

HTB:LinkVortex[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用gobuster对靶机进行路径FUZZ 使用ffuf堆靶机…

3D图形学与可视化大屏:什么是材质属性,有什么作用?

一、颜色属性 漫反射颜色 漫反射颜色决定了物体表面对入射光进行漫反射后的颜色。当光线照射到物体表面时&#xff0c;一部分光被均匀地向各个方向散射&#xff0c;形成漫反射。漫反射颜色的选择会直接影响物体在光照下的外观。例如&#xff0c;一个红色的漫反射颜色会使物体在…

什么是门控循环单元?

一、概念 门控循环单元&#xff08;Gated Recurrent Unit&#xff0c;GRU&#xff09;是一种改进的循环神经网络&#xff08;RNN&#xff09;&#xff0c;由Cho等人在2014年提出。GRU是LSTM的简化版本&#xff0c;通过减少门的数量和简化结构&#xff0c;保留了LSTM的长时间依赖…

基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)

酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 &#xff08;1&#xff09;系统首页 &#xff…

Java-数据结构-优先级队列(堆)

一、优先级队列 ① 什么是优先级队列&#xff1f; 在此之前&#xff0c;我们已经学习过了"队列"的相关知识&#xff0c;我们知道"队列"是一种"先进先出"的数据结构&#xff0c;我们还学习过"栈"&#xff0c;是"后进先出"的…

爬虫基础(四)线程 和 进程 及相关知识点

目录 一、线程和进程 &#xff08;1&#xff09;进程 &#xff08;2&#xff09;线程 &#xff08;3&#xff09;区别 二、串行、并发、并行 &#xff08;1&#xff09;串行 &#xff08;2&#xff09;并行 &#xff08;3&#xff09;并发 三、爬虫中的线程和进程 &am…

C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】

1. 题目描述 力扣在线OJ题目 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 示例&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 输入&#xff1a;nums1 [4,9,5], nums2 [9,4,9,8,4] 输出&#xff1a;[9,4] 2. 思路 直接暴力…

Sqoop导入MySQL中含有回车换行符的数据

个人博客地址&#xff1a;Sqoop导入MySQL中含有回车换行符的数据 MySQL中的数据如下图&#xff1a; 检查HDFS上的目标文件内容可以看出&#xff0c;回车换行符位置的数据被截断了&#xff0c;导致数据列错位。 Sqoop提供了配置参数&#xff0c;在导入时丢弃掉数据的分隔符&…

LightM-UNet(2024 CVPR)

论文标题LightM-UNet: Mamba Assists in Lightweight UNet for Medical Image Segmentation论文作者Weibin Liao, Yinghao Zhu, Xinyuan Wang, Chengwei Pan, Yasha Wang and Liantao Ma发表日期2024年01月01日GB引用> Weibin Liao, Yinghao Zhu, Xinyuan Wang, et al. Ligh…

stm32硬件实现与w25qxx通信

使用的型号为stm32f103c8t6与w25q64。 STM32CubeMX配置与引脚衔接 根据stm32f103c8t6引脚手册&#xff0c;采用B12-B15四个引脚与W25Q64连接&#xff0c;实现SPI通信。 W25Q64SCK&#xff08;CLK&#xff09;PB13MOSI&#xff08;DI&#xff09;PB15MISO(DO)PB14CS&#xff08…

FPGA 使用 CLOCK_DEDICATED_ROUTE 约束

使用 CLOCK_DEDICATED_ROUTE 约束 CLOCK_DEDICATED_ROUTE 约束通常在从一个时钟区域中的时钟缓存驱动到另一个时钟区域中的 MMCM 或 PLL 时使 用。默认情况下&#xff0c; CLOCK_DEDICATED_ROUTE 约束设置为 TRUE &#xff0c;并且缓存 /MMCM 或 PLL 对必须布局在相同…

一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI

一、GenBI AI 代理介绍&#xff08;文末提供下载&#xff09; github地址&#xff1a;https://github.com/Canner/WrenAI 本文信息图片均来源于github作者主页 在 Wren AI&#xff0c;我们的使命是通过生成式商业智能 &#xff08;GenBI&#xff09; 使组织能够无缝访问数据&…

C动态库的生成与在Python和QT中的调用方法

目录 一、动态库生成 1&#xff09;C语言生成动态库 2&#xff09;c类生成动态库 二、动态库调用 1&#xff09;Python调用DLL 2&#xff09;QT调用DLL 三、存在的一些问题 1&#xff09;python调用封装了类的DLL可能调用不成功 2&#xff09;DLL格式不匹配的问题 四、…

C++ Primer 自定义数据结构

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

解析 Oracle 中的 ALL_SYNONYMS 和 ALL_VIEWS 视图:查找同义词与视图的基础操作

目录 前言1. ALL_SYNONYMS 视图2. ALL_VIEWS 视图3. 扩展 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 1. ALL_SYNONYMS 视图 在 Oracle 数据库中&#xff0c;同义词&#xff08;Synonym&#xff09;是对数…

PyTorch框架——基于深度学习YOLOv8神经网络学生课堂行为检测识别系统

基于YOLOv8深度学习的学生课堂行为检测识别系统&#xff0c;其能识别三种学生课堂行为&#xff1a;names: [举手, 读书, 写字] 具体图片见如下&#xff1a; 第一步&#xff1a;YOLOv8介绍 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本…

7.攻防世界fileclude

题目描述 进入题目页面如下 看到题目提示应该为文件包含漏洞 解释上述代码 // 输出提示信息&#xff1a;错误的方式&#xff01; WRONG WAY! <?php // 包含名为 "flag.php" 的文件&#xff0c;通常这个文件里可能包含重要的敏感信息&#xff0c;如 flag inclu…

【自然语言处理(NLP)】深度学习架构:Transformer 原理及代码实现

文章目录 介绍Transformer核心组件架构图编码器&#xff08;Encoder&#xff09;解码器&#xff08;Decoder&#xff09; 优点应用代码实现导包基于位置的前馈网络残差连接后进行层规范化编码器 Block编码器解码器 Block解码器训练预测 个人主页&#xff1a;道友老李 欢迎加入社…

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)

目录 1 -> HML语法 1.1 -> 页面结构 1.2 -> 数据绑定 1.3 -> 普通事件绑定 1.4 -> 冒泡事件绑定5 1.5 -> 捕获事件绑定5 1.6 -> 列表渲染 1.7 -> 条件渲染 1.8 -> 逻辑控制块 1.9 -> 模板引用 2 -> CSS语法 2.1 -> 尺寸单位 …