AtCoder Beginner Contest 283 (A~F)

news2024/11/22 18:57:09

比赛名称:UNIQUE VISION Programming Contest 2022 Winter(AtCoder Beginner Contest 283)

比赛链接:AtCoder Beginner Contest 283

A - Power

题意:

求A^B(1<=A,B<=9)

要注意这个int强制转换,不然9^9输出结果时387420489,会wa,QAQ~

#include <bits/stdc++.h>
using namespace std;
signed main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, m;
  cin >> n >> m;
  cout << (int)pow(n, m) << "\n";
  return 0;
}

B - First Query Problem 

题意:

给定一个数组a和 q个操作

  • 1 k x ,ak = x
  • 2 k ,输出ak
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 6;
int a[N];
signed main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int n;
  cin >> n;
  for(int i = 1; i <= n; i++) cin >> a[i];
  int q, x, v;
  cin >> q;
  while(q--){
    int op;
    cin >> op;
    if(op == 2) {
      cin >> x;
      cout << a[x] << "\n";
    }else{
      cin >> x >> v;
      a[x] = v;
    }
  }
  return 0;
}

C - Cash Register 

题意:

有一个收银机,有11个键。00,0,1,2,3,4,5,6,7,8和9。收银机最初显示0。每当他输入00键时,显示的数字就会乘以100;每当他输入其他键时,显示的数字就会乘以10,然后再加上键上的数字。高桥想让收银机显示一个整数S,至少需要多少次按键才能使它显示S?

思路:

按字符串处理,如果遇到连续的00只需要一次操作即可,其他也都是一次操作

写得有点麻烦了~

#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  string s;
  cin >> s;
  int ans = 1;
  for(int i = 1; i < s.size();){
    if(s[i] != '0') ans ++, i++;
    else{
      if(s[i + 1] == '0' && i + 1 < s.size()) ans ++, i+=2;
      else ans++, i++; 
    }
  }
  cout << ans << "\n";
  return 0;
}

D - Scope 

题意:

一共有11中关键词: 00,0,1,2,3,4,5,6,7,8,9。给出一个数字,求这个数字由多少个关键词组成?

思路: 

用模拟栈存每个离)最近的(,当遇到)就把括号中的小写字母全部删去

#include <bits/stdc++.h>
using namespace std;
int main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  string s;
  cin >> s;
  vector<int> p;
  vector<int> C;
  vector<bool> vis(30, false);
  bool ok = true;
  int f = 0;
  for(int i = 0; i < s.size(); i++){
    if(s[i] == '(') p.push_back(i);
    else if(s[i] == ')'){
      int k = p.back();
      p.pop_back();
      while(!C.empty() && C.back() > k){
        vis[s[C.back()] - 'a'] = false;
        C.pop_back();
      }
    }else{
      if(vis[s[i] - 'a']){
        ok = false;
        break;
      }
      vis[s[i] - 'a'] = true;
      C.push_back(i); 
    }
  }
  cout << (ok ? "Yes\n" : "No\n");
  return 0;
}

E - Don't Isolate Elements 

题意:

给一个01矩阵,每次可以翻转某行的01,问最少的操作次数使得,没有一个位置的上下左右都与其不同

思路:

动态规划

 每行都有且只有两种状态,翻转或不翻转,所以定义状态dp[i][j][k]表示,前i行已经确定,第i-1行的状态位j,第i行状态为k时使合法的操作数

状态转移方程:dp[i][j][k] = min(dp[i][j][k], dp[i - 1][u][j] + k)

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int n, m;
int a[N][N], f[N][2][2];
 
bool check(int i, int x, int y, int z){
  for (int j = 1; j <= m; j++){
    if (a[i][j] != a[i][j - 1] && a[i][j] != a[i][j + 1] && (a[i][j] ^ y) != (a[i - 1][j] ^ x) && (a[i][j] ^ y) != (a[i + 1][j] ^ z)){
      return 0;
    }
  }
  return 1;
}
 
int main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  memset(a, -1, sizeof a);
  cin >> n >> m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      cin >> a[i][j];
 
  memset(f, 0x3f, sizeof f);
  f[1][0][0] = 0;
  f[1][0][1] = 1;
  for (int i = 2; i <= n; i++)
    for (int j = 0; j < 2; j++)
      for (int k = 0; k < 2; k++)
        for (int l = 0; l < 2; l++)
          if (check(i - 1, j, k, l))
            f[i][k][l] = min(f[i][k][l], f[i - 1][j][k] + l);
 
  int ans = 0x3f3f3f3f;
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++)
      for (int k = 0; k < 2; k++)
        if (check(n, i, j, k))
          ans = min(ans, f[n][i][j]);
  
  cout << (ans == 0x3f3f3f3f ? -1 : ans) << "\n";
  return 0;
}

 F - Permutation Distance

题意:

给一个排列p,求d数组

其中d数组满足

 思路:

由上总共四种情况

d_{i} = \left\{\begin{matrix} p_{i}-p_{j}+i-j&p_{i}>p_{j} &i>j \\ -p_{i}+p_{j}+i-j&p_{i}<p_{j} &i>j \\ p_{i}-p_{j}-i+j&p_{i}>p_{j} &i<j \\ -p_{i}+p_{j}-i+j&p_{i}<p_{j} &i<j \end{matrix}\right.

所以我们可以发现可以用一个数据结构去维护|pi+i|,根据不同的限制条件,最后算四种情况下的最小值

这里我们选择树状数组来维护,具体见代码。

AcCode:

#include <bits/stdc++.h>
#define lowbit(x) x & (-x)
#define inf 0x3f3f3f3f
using namespace std;
const int N = 1e6 + 9;
int n;
int tr[N], p[N], ans[N];
 
void add(int x, int v){
  for(int i = x; i <= n; i += lowbit(i))
    tr[i] = min(tr[i], v); 
}
 
int query(int x){
  int ans = inf;
  for(int i = x; i; i -= lowbit(i))
    ans = min(ans, tr[i]);
  return ans;
}
 
signed main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n;
  for(int i = 1; i <= n; i++) cin >> p[i], ans[i] = inf;
  memset(tr, 0x3f, sizeof tr);
  for(int i = 1; i <= n; i++){
    ans[i] = min(ans[i], query(p[i]) + p[i] + i);
    add(p[i], -p[i] - i);
  }
  memset(tr, 0x3f, sizeof tr);
  for(int i = 1; i <= n; i++){
    ans[i] = min(ans[i], query(n + 1 - p[i]) - p[i] + i);
    add(n + 1 - p[i], p[i] - i);
  }
  memset(tr, 0x3f, sizeof tr);
  for(int i = n; i >= 1; i--){
    ans[i] = min(ans[i], query(p[i]) + p[i] - i);
    add(p[i], -p[i] + i);
  }
  memset(tr, 0x3f, sizeof tr);
  for(int i = n; i >= 1; i--){
    ans[i] = min(ans[i], query(n + 1 - p[i]) - p[i] - i);
    add(n + 1 - p[i], p[i] + i);
  }
  for(int i = 1; i <= n; i++) cout << ans[i] << " \n"[i == n];
  return 0;
}

G题,EX题嗷嗷待补~QAQ~摸了 

 

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

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

相关文章

python根据json数据画疫情分布地图

目录 一.基础地图使用 1.掌握使用pyecharts构建基础的全国地图可视化图表 二.疫情地图——国内疫情地图 1.案例效果 代码 三.疫情地图——省级疫情地图 四.数据集 注&#xff1a;数据集在文章最后 一.基础地图使用 1.掌握使用pyecharts构建基础的全国地图可视化图表 演…

Learning to Segment Every Thing

摘要 现有的目标实例分割方法要求所有训练样本都具有分割mask标注。然而&#xff0c;标注新的类别是非常费劲的&#xff0c;因此这将实例分割模型的应用范围限制在100个左右的有标注的类。本文的目的是提出一种新的部分监督的训练模型&#xff0c;以及一种新的权重传递函数&am…

洛谷【算法1-7】搜索刷题——优化、错题

文章目录[USACO1.5]八皇后 Checker Challenge题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路搜索框架代码位运算优化lowbit运算思路kkksc03考前临时抱佛脚题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码吃奶酪题目描述输入格式输…

C++ STL 之可变长数组 Vector 详解

文章目录Part.I AttentionChap.I 注意事项Chap.II 操作技巧Part.II FunctionChap.I 构造函数Chap.II 增加函数Chap.III 删除函数Chap.IV 遍历函数Chap.V 判断/大小/其他函数Part.III CodePart.I Attention Chap.I 注意事项 使用vector需要注意的地方&#xff1a; 加引用#inc…

分布式与微服务系列 - SpringBoot + Zookeeper集群 + Dubbo分布式托管(提供者、消费者)+ Nginx反向代理

一、前言 本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 再搭建集群项目前&#xff0c;请先学习相关技术的知识&#xff1a; 分布式与微服务系列 - Dubbo分布式与微服务系列 - Zookeeper上篇&#xff1a;入门到精通参考文档&#xff1a;分布式与微服务…

状态机——奇葩的状态表示

状态机——奇葩的状态表示 简述 在动态规划中&#xff0c;遇到有一个点有多个状态&#xff0c;混在一起无法表示&#xff0c;那么就可以把状态分开&#xff0c;并且构造出不同状态之间的转移关系&#xff0c;然后再求出状态转移方程&#xff0c;之后就OK了。 题目 1049. 大…

GNN algorithms(3): Tri-party Deep Network Representation

目录 Tri-party Deep Network Representation Essence Thinking Abstract Introduction Problem Definition Tri-DNR pipelines Model Architecture Tri-party Deep Network Representation Essence 1) Deepwalk提取graph structure信息&#xff0c;即structural nod…

MyBatis 一文基础总结

MyBatis 一文基础总结老师的随堂上课笔记&#xff0c; 供参考~1.框架概述1.1 软件开发常用结构1.1.1三层架构三层的处理请求的交互&#xff1a;用户---> 界面层--->业务逻辑层--->数据访问层--->DB 数据库1.1.2 常用框架常见的 J2EE 中开发框架&#xff1a;MyBatis…

adworld-web-inget-20221226

inget 题目来源: 宜兴网信办 题目描述: 无 题目场景: http://61.147.171.105:51222 http://61.147.171.105:51222/?id1%27%20%20or%2011%20– Please enter ID,and Try to bypass nice : congratulations Flag Is : cyberpeace{3df1eecfb5f794d6a94eba429f7e2846} ┌…

【NI Multisim 14.0编辑环境——菜单栏】

目录 序言 一、菜单栏 &#x1f349;1.文件 &#x1f349;2.编辑 &#x1f349;3.视图 &#x1f349; 4.绘制 &#x1f349;5.MCU&#xff08;微控制器&#xff09;菜单 &#x1f349; 6.仿真 &#x1f349; 7.转移 &#x1f349; 8.工具 &#x1f349; 9.报告 &…

录屏有声音吗?电脑如何录屏有声音?图文教程来了!

无论是学习、办公还是娱乐&#xff0c;都需要屏幕录制。许多人在录制视频后发现视频没有发出声音。录屏有声音吗&#xff1f;电脑如何录屏有声音&#xff1f;一个相对简单的方法是在使用电脑的屏幕录制功能时检查是否打开录制屏幕的声音。此外&#xff0c;如果您担心每次都需要…

这应该是全网最全的MySQL数据库的常用命令了吧

目录 前言 数据库的创建 数据表的操作 表数据的增删查改 分组与函数查询 分组与函数查询 运算符&#xff1a;数学运算符 连接查询 前言 今天给大家点来MySQL数据库的常用命令总结&#xff0c;这应该是全网最详细&#xff0c;最实用的数据库命令总结了&#xff0c;因为命…

addr2line

1、符号表 1.1什么是符号表 符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示&#xff1a; <起始地址> <结束地址> <函数> [<文件名:行号>] 1.2为什么要配置符号表 为了能快速并准确地定位引擎发生Crash的代码位置 举个例子…

【UE4 第一人称射击游戏】16-重新装弹

上一篇&#xff1a; 【UE4 第一人称射击游戏】15-修复蹲伏和冲刺同时执行的bug 本章效果&#xff1a; 步骤&#xff1a; 1.打开“Weapon_Base”&#xff0c;添加两个整数类型变量&#xff0c;分别命名为“MaxAmmo”和“ClipSize”&#xff0c;表示最大载弹量和每次重新装弹的…

MATLAB多项式符号运算

符号计算是指在运算时&#xff0c;无须事先对变量进行赋值&#xff0c;而是将所有得到的结果以标准的符 号形式表示出来。符号计算是以符号对象和符号表达式作为运算对象的表达形式&#xff0c;最终给出 的是解析解;在运算过程中不会受到计算误差累积问题的影响&#xff0c;其计…

信息安全编码标准:使用SAST实施安全编码实践

信息安全编码标准:使用SAST实施安全编码实践 当开发团队使用信息安全编码标准来开发软件时&#xff0c;通常希望更少的安全Bug和更好的代码质量&#xff0c;从而给用户带来健壮性更好的产品。在本篇文章中&#xff0c;我们将介绍信息安全编码标准的基础知识、最佳实践、如何以…

【swaggo】swaggo使用详解

一、swagger简介 swagger是一套基于OpenAPI规范构建的开源工具&#xff0c;使用RestApi。swagger-ui 呈现出来的是一份可交互式的API文档&#xff0c;可以直接在文档页面尝试API的调用。     gin-swagger 是基于注释生成 API 文档&#xff0c;项目地址:https://github.com/…

vulfocus复现:log4j2-rce-2021-12-09

文章目录一、漏洞影响二、复现过程一、漏洞影响 Apache Log4j 是一个基于Java的日志记录工具。经过多年的开发迭代&#xff0c;Log4j 1.x的维护已经变得非常困难&#xff0c;因为它需要与非常旧的 Java 版本兼容&#xff0c;所以于 2015 年 8 月正式升级为Log4j2。黑客可以恶意…

【C++】堆与二叉树(非常详细,附带堆排哦)

之前学习了很多的数据结构 有顺序表&#xff0c;堆&#xff0c;栈... 今天学习一种新的逻辑结构二叉树&#xff0c;他的物理结构是堆 让我们先简单回顾一下堆吧堆的简单介绍和一些简单功能的实现 1. 二叉树 其实堆就是一种特殊的数组&#xff0c;他的逻辑结构是二叉树 &#…

汽车OTA概述

文章目录 前言一、软件更新二、ECU刷写包复用 1.引入库2.读入数据总结前言 掌握OTA&#xff08;Over-The-Air&#xff0c;无线技术&#xff09;&#xff0c;汽车领域与IT领域正在技术融合&#xff01; 技术更新&#xff0c;也增加了车载应用场景&#xff0c;软件更新、实时诊…