AtCoder Beginner Contest 346

A. Adjacent Product(循环)

题意

给出 N N N个数字 A 1 , A 2 , … , A N A_1, A_2, \ldots, A_N A1,A2,,AN。定义 B i = A i × A i + 1 ( 1 ≤ i ≤ N − 1 ) B_i = A_i \times A_{i + 1}(1 \le i \le N - 1) Bi=Ai×Ai+1(1iN1)

请你打印 B 1 , B 2 , … , B N − 1 B_1, B_2, \ldots, B_{N - 1} B1,B2,,BN1

分析

输入后使用循环计算出 B B B数组中每一项的值,并将对应的值输出即可。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;int a[105];void solve() {int n;cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}for (int i = 2; i <= n; i++) {if (i - 2) cout << ' ';cout << a[i - 1] * a[i];}cout << endl;
}int main() {solve();return 0;
}

B. Piano(暴力)

题意

给出一个以"wbwbwwbwbwbw"无限循环的字符串,问,能否取出该字符串中的一个子串,使得子串中字符'w'的出现次数恰好为 W W W,字符'b'的出现次数恰好为 B B B

思路1:构造字符串

可以将字符串拼接若干次,保证长度能够满足题目要求,然后检查该字符串中所有长度为 W + B W + B W+B的子串是否满足要求,如果满足要求,输出"Yes",否则,输出"No"

hint: 由于题目数据范围较小,因此枚举子串并检查的方法可以使用暴力枚举,前缀和,双指针等方式进行均可。

思路2:取模

由于字符串是循环的,那么字符串第 i i i个字符与第 i i % 12 i个字符是相同的,因此,不需要拼接字符串,直接对该长度为12的字符串进行枚举检查即可。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;string s = "wbwbwwbwbwbw";
string str = "";void solve() {while (str.size() < 20000) {str += s;}int W, B;cin >> W >> B;int w = 0, b = 0;for (int i = 0; i < W + B; i++) {if (str[i] == 'w') w++;else b++;}if (w == W && B == b) {cout << "Yes" << endl;return;} else {for (int i = W + B; i < str.size(); i++) {if (str[i] == 'w')  {w++;} else {b++;}if (str[i - W - B] == 'w') {w--;} else {b--;}if (w == W && B == b) {cout << "Yes" << endl;return;}}}cout << "No" << endl;
}int main() {solve();return 0;
}

C. Σ (set)

题意

给出 N N N个数字 A 1 , A 2 , … , A N A_1, A_2, \ldots, A_N A1,A2,,AN,问 1 ∼ K 1 \sim K 1K之间所有未在数组 A A A中出现的数字之和是多少?

分析

对于 1 ∼ K 1 \sim K 1K之间的数字之和,可以通过等差数量的求和公式直接得到( ( 1 + K ) × K 2 \frac{(1 + K) \times K}{2} 2(1+K)×K)。

然后考虑怎么减去范围内在数字 A A A中出现过的数字,由于数组 A A A中的数字可能出现重复,因此,需要对数组中的元素进行去重,可以使用set, map, unique等容器或函数来进行。

去重完成后,遍历剩余的元素,如果在 1 ∼ K 1 \sim K 1K范围内,就将这个数字从答案中减掉。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;set<int> S;void solve() {ll n, k;cin >> n >> k;for (int i = 1; i <= n; i++) {int a;cin >> a;S.insert(a);}ll ans = (1ll + k) * k / 2;for (auto i : S) {if (i > k) break;ans -= i;}cout << ans << endl;
}int main() {solve();return 0;
}

D. Gomamayo Sequence(DP)

题意

给出一个仅包含01的字符串,然后给出对于好字符串的定义:

  • 对于字符串中所有相邻的字符,如果只存在一对相邻的字符是相等的,那么就认为这个字符是好字符串。

对于字符串中第 i i i个字符,你可以花费 C i C_i Ci的费用将该字符变成另一个字符(0110),问,最少花费多少,可以使得字符串变成好字符串。

分析

考虑 D P DP DP,定义 d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k]为第 i i i个字符为 j j j k = 0 k = 0 k=0表示当前字符为 j j j时前面所有相邻的字符中未出现相同的, k = 1 k = 1 k=1表示当前字符为 j j j时前面所有字符中已经出现相同的。

转移方程:

  • 对于 d p [ i ] [ 0 ] [ 0 ] dp[i][0][0] dp[i][0][0],由于当前字符为0,且前面所有相邻字符均未出现相同的情况,那么能继承的只有上一个字符选择1,且也没有出现相邻相同的状态 d p [ i − 1 ] [ 1 ] [ 0 ] dp[i - 1][1][0] dp[i1][1][0]

  • 对于 d p [ i ] [ 1 ] [ 0 ] dp[i][1][0] dp[i][1][0],由于当前字符为1,且前面所有相邻字符均未出现相同的情况,那么能继承的只有上一个字符选择0,且也没有出现相邻相同的状态 d p [ i − 1 ] [ 0 ] [ 0 ] dp[i - 1][0][0] dp[i1][0][0]

  • 对于 d p [ i ] [ 0 ] [ 1 ] dp[i][0][1] dp[i][0][1],由于当前字符为0,且包含当前字符时已经出现相邻相同的情况了,那么就可以分为以下两种情况,选择两种情况中的较小值:

    • 前面没有出现相邻相同的情况,但当前字符与上一个字符相同,此时刚好出现相邻相同的情况: d p [ i − 1 ] [ 0 ] [ 0 ] dp[i - 1][0][0] dp[i1][0][0]

    • 前面已经出现相邻相同的情况,此时字符必须与前一个字符不同: d p [ i − 1 ] [ 1 ] [ 1 ] dp[i - 1][1][1] dp[i1][1][1]

  • 对于 d p [ i ] [ 1 ] [ 1 ] dp[i][1][1] dp[i][1][1],由于当前字符为1,且包含当前字符时已经出现相邻相同的情况了,那么就可以分为以下两种情况,选择两种情况中的较小值:

    • 前面没有出现相邻相同的情况,但当前字符与上一个字符相同,此时刚好出现相邻相同的情况: d p [ i − 1 ] [ 1 ] [ 0 ] dp[i - 1][1][0] dp[i1][1][0]

    • 前面已经出现相邻相同的情况,此时字符必须与前一个字符不同: d p [ i − 1 ] [ 0 ] [ 1 ] dp[i - 1][0][1] dp[i1][0][1]

hint:

  1. 如果 j j j与当前字符不同,需要加上修改字符的费用。

  2. 只有 i > 1 i > 1 i>1时,才可能出现 k = 1 k = 1 k=1的情况,因此 i = 1 i = 1 i=1时, d p [ 1 ] [ j ] [ 1 ] dp[1][j][1] dp[1][j][1]不能继承状态,可以将所有 d p [ 0 ] [ j ] [ 1 ] dp[0][j][1] dp[0][j][1] d p [ 1 ] [ j ] [ 1 ] dp[1][j][1] dp[1][j][1]初始化为极大值,并在状态转移时特判跳过。

结束状态转移后,由于要求必须存在恰好一对相邻相同的情况,因此答案为 m i n ( d p [ n ] [ 0 ] [ 1 ] , d p [ n ] [ 1 ] [ 1 ] ) min(dp[n][0][1], dp[n][1][1]) min(dp[n][0][1],dp[n][1][1])

代码

#include <bits/stdc++.h>using namespace std;
typedef long long ll;ll n, c[200005], dp[200005][2][2];
string s;int main() {cin >> n >> s;s = "#" + s;for (int i = 1; i <= n; i++) {cin >> c[i];}dp[0][0][1] = dp[0][1][1] = dp[1][0][1] = dp[1][1][1] = 0x3f3f3f3f3f3f3f3f;for (int i = 1; i <= n; i++) {if (s[i] == '0') {dp[i][0][0] = dp[i - 1][1][0];dp[i][1][0] = dp[i - 1][0][0] + c[i];if (i == 1) continue;dp[i][0][1] = min(dp[i - 1][1][1], dp[i - 1][0][0]);dp[i][1][1] = min(dp[i - 1][1][0], dp[i - 1][0][1]) + c[i];} else {dp[i][0][0] = dp[i - 1][1][0] + c[i];dp[i][1][0] = dp[i - 1][0][0];if (i == 1) continue;dp[i][0][1] = min(dp[i - 1][1][1], dp[i - 1][0][0]) + c[i];dp[i][1][1] = min(dp[i - 1][1][0], dp[i - 1][0][1]);}}cout << min(dp[n][0][1], dp[n][1][1]) << endl;return 0;
}

E. Paint(思维)

题意

有一个 H H H W W W列的网格,开始时,所有的格子都被涂上了颜色0

你将在 i = 1 , 2 , … , M i = 1, 2, \ldots, M i=1,2,,M时执行以下操作:

  • 如果 T i = 1 T_i = 1 Ti=1,将第 A i A_i Ai行涂成颜色 X i X_i Xi

  • 如果 T i = 2 T_i = 2 Ti=2,将第 A i A_i Ai列涂成颜色 X i X_i Xi

请你输出操作结束后网格上剩余的颜色以及这些颜色所占的网格数量。

分析

对于每个网格结束操作后的颜色,实际上只取决于最后一次操作时涂上的颜色,因此,可以对每一行,每一列的操作进行标记,如果后面操作过了这一行或这一列,那么前面对这一行或这一列的操作就可以忽略了。

因此,可以从后往前遍历操作,如果当前操作的行和列没被涂色过,就将该行(或列)进行标记,并记录当前涂上的颜色的个数(涂行就记录剩余列数,涂列就记录剩余行数)。

然后对于每个涂色操作,可以将被涂色的行(或列)视为涂完色后就被删除了,那么每次涂色就是对于剩余部分的行数(或列数)进行涂色的,也便于计算每个颜色的个数。

结束涂色后,剩余的行数 × \times ×列数就是颜色0的数量。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;ll H, W, M, h[200005], w[200005], t[200005], a[200005], x[200005];ll vis[200005], cnt[200005];vector<pair<ll, ll> > ans;int main() {cin >> H >> W >> M;for (int i = 1; i <= M; i++) {cin >> t[i] >> a[i] >> x[i];}for (int i = M; i >= 1; i--) {if (t[i] == 1) {if (!h[a[i]]) {h[a[i]] = 1;cnt[x[i]] += W;H--;}} else {if (!w[a[i]]) {w[a[i]] = 1;cnt[x[i]] += H;W--;}}}cnt[0] += H * W;for (int i = 0; i <= 2e5; i++) {if (cnt[i]) {ans.push_back(make_pair(i, cnt[i]));}}cout << ans.size() << endl;for (auto i : ans) {cout << i.first << ' ' << i.second << endl;}return 0;
}

F ∼ G F \sim G FG,更新中…

赛后交流

在比赛结束后,会在交流群中给出比赛题解,同学们可以在赛后查看题解进行补题。

群号: 704572101,赛后大家可以一起交流做题思路,分享做题技巧,欢迎大家的加入。

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

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

相关文章

javase day09笔记

第九天课堂笔记 构造方法★★★★ 完成对属性赋值构造方法的名字必须与类名一致没有返回值类型public 类名&#xff08;【参数】&#xff09;{ }构造方法在创建对象时同步执行没写无参构造&#xff0c;系统默认提供写了构造方法&#xff0c;系统不再提供构造方法:重载 引用数…

牛客NC108 最大正方形【中等 动态规划 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e 思路 动态规划: 先初始化第一行和第一列。然后其他单元格依赖自己的上边&#xff0c;左边和左上角参考答案Java import java.util.*;public class Solution {/*** 代码中的类…

Naive UI:一个 Vue 3 组件库,比较完整,主题可调,使用 TypeScript,快有点意思。

在当今的前端开发领域&#xff0c;Vue 3已成为中后台应用的首选框架。为了满足开发者的需求&#xff0c;各种组件库如雨后春笋般涌现。其中&#xff0c;Naive UI以其独特的优势&#xff0c;成为了Vue 3开发者的得力助手。本文将深入探讨Naive UI的特性、优势以及如何使用它来提…

docker镜像安装空间不足no space left on device

报错&#xff1a;Error processing tar file(exit status 1): open /usr/local/lib/libmkl_tbb_thread.so.1: no space left on device 原先docker模型保存位置&#xff1a; docker info -f ‘{{ .DockerRootDir}}’ docker 高点版本&#xff0c;这里26.0 解决参考&#xf…

学习次模函数-第1章 引言

许多组合优化问题可以被转换为集合函数的最小化&#xff0c;集合函数是在给定基集合的子集的集合上定义的函数。同样地&#xff0c;它们可以被定义为超立方体的顶点上的函数&#xff0c;即&#xff0c;其中是基集合的基数-它们通常被称为伪布尔函数[27]。在这些集合函数中&…

Linux 创建交换空间

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

鸿蒙Harmony应用开发—ArkTS-应用级变量的状态管理

状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态。 说明&#xff1a; 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 本文中T和S的含义…

“文本魔术师:Python玩转文字格式转换“

Hey小伙伴们&#xff0c;今天我们要一起探索一个超级实用的小技能——Python文字转换器&#xff01;想象一下&#xff0c;你的文字作品能瞬间变换成小说、诗歌、甚至是密码&#xff0c;是不是很酷&#xff1f;跟着我&#xff0c;咱们一步步来学习如何用Python实现这个神奇的功能…

赋能数据收集:从机票网站提取特价优惠的JavaScript技巧

背景介绍 在这个信息时代&#xff0c;数据的收集和分析对于旅游行业至关重要。在竞争激烈的市场中&#xff0c;实时获取最新的机票特价信息能够为旅行者和旅游企业带来巨大的优势。 随着机票价格的频繁波动&#xff0c;以及航空公司和旅行网站不断推出的限时特价优惠&#xff…

每日一题 --- 螺旋矩阵 II[力扣][Go]

螺旋矩阵 II 题目&#xff1a;59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出…

网络分析(蓝桥杯,acwing,并查集)

题目描述&#xff1a; 小明正在做一个网络实验。 他设置了 n 台电脑&#xff0c;称为节点&#xff0c;用于收发和存储数据。 初始时&#xff0c;所有节点都是独立的&#xff0c;不存在任何连接。 小明可以通过网线将两个节点连接起来&#xff0c;连接后两个节点就可以互相通…

202312 CSP认证 | 树上搜索

树上搜索 这题算是寒假期间自己先写了一遍&#xff0c;当时是20分超时了 当时的存储思路是&#xff0c;存储每一个节点的所有后代节点&#xff0c;然后在找到wsigma最小的节点之后用的集合操作。这导致了一个问题&#xff1a; 更新维护成本很高。每删除一个分支&#xff0c;都…

python 爬虫爬取地理空间高程图GDEMV2 30m 中国地形

一.配置Python 爬虫 环境 from selenium import webdriver import time # from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys # from selenium.webdriver.comm…

Linux命令总结

1.目录切换 #切换到该目录下 usr 目录 cd usr #切换到上一层目录 cd ../ cd .. #切换到系统根目录 cd / #切换到用户主目录 cd ~ #切换到上一个操作所在目录 cd -2.目录操作 #显示目录中的文件和子目录的列表 ls /usr #目录下的所有目录和文件的详细信息 ll /usr #创建新目录…

【鸿蒙系统】 ---OpenHarmony加快本地编译(二)

&#x1f48c; 所属专栏&#xff1a;【鸿蒙系统】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢…

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别分类效果基本介绍模型描述程序设计参考…

sqlalchemy和moke生成实体类(一)

前言 如果通过java生成实体类&#xff0c;可以通过mybatis或者mybatis-plus的generator。 而sqlalchemy也可以生成实体类&#xff0c;通过sqlalcodegen或者flask-sqlalcodegen。 使用flask-sqlalcodegen生成实体类 建表 建立学生表&#xff0c;如下。 create table stude…

【Android】系统启动流程分析 —— init 进程启动过程

本文基于 Android 14.0.0_r2 的系统启动流程分析。 一、概述 init 进程属于一个守护进程&#xff0c;准确的说&#xff0c;它是 Linux 系统中用户控制的第一个进程&#xff0c;它的进程号为 1&#xff0c;它的生命周期贯穿整个 Linux 内核运行的始终。Android 中所有其它的进程…

Machine Learning - Logistic Regression

目录 一、Activation Function Why introduce activation functions? There are several commonly used activation functions: 二、Sigmoid&#xff1a; 三、Logistic Regression Model&#xff1a; 四、Implementation of logistic regression&#xff1a; 五、Decis…

unity 多屏幕操作

想了解基础操作请移步&#xff1a;&#xff08;重点是大佬写的好&#xff0c;这里就不再赘述&#xff09; Unity 基础 之 使用 Display 简单的实现 多屏幕显示的效果_unity display-CSDN博客 在panel上也可以通过获取 Canvas&#xff0c;来达到切换多屏幕的操作&#xff0c; …