位置: IT常识 - 正文

AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)(蓝桥杯咋样)

编辑:rootadmin
AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5) 文章目录一、AcWing 3956. 截断数组(中等)1. 实现思路2. 实现代码二、AcWing 3729. 改变数组元素(中等)1. 实现思路2. 实现代码三、AcWing 1460. 我在哪?(简单)1. 实现思路2. 实现代码四、AcWing 3768. 字符串删减(简单)1. 实现思路2. 实现代码五、AcWing 3777. 砖块(简单)1. 实现思路2. 实现代码一、AcWing 3956. 截断数组(中等)

推荐整理分享AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)(蓝桥杯咋样),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:“蓝桥杯”,蓝桥杯top1%,蓝桥杯百度贴吧,蓝桥杯top1%,“蓝桥杯”,蓝桥杯a组获奖,蓝桥杯官方,蓝桥杯官方,内容如对您有帮助,希望把文章链接给更多的朋友!

题目描述

给定一个长度为 nnn 的数组 a1,a2,…,ana_{1},a_{2},…,a_{n}a1​,a2​,…,an​。 现在,要将该数组从中间截断,得到三个非空子数组。 要求,三个子数组内各元素之和都相等。 请问,共有多少种不同的截断方法?

输入格式

第一行包含整数 nnn。 第二行包含 nnn 个整数 a1,a2,…,ana_{1},a_{2},…,a_{n}a1​,a2​,…,an​。

输出格式

输出一个整数,表示截断方法数量。

数据范围

前六个测试点满足: 1≤n≤101≤n≤101≤n≤10。 所有测试点满足: 1≤n≤15,−10000≤ai≤100001≤n≤10^{5},−10000≤a_{i}≤100001≤n≤105,−10000≤ai​≤10000。

输入样例 1

4 1 2 3 3

输出样例 1

1

输入样例 2

5 1 2 3 4 5

输出样例 2

0

输入样例 3

2 0 0

输出样例 3

0

具体实现

1. 实现思路我们有一个长度为 n 的数组,将其分成三段,使三段内的元素都相等,求有多少种截断方法。首先,我们可以先求解一些总和 s,如果 3 不可以整除总和 s 的话,就一定无解。如果想要有解的话,s 一定是 3 的倍数。因此,我们可以先计算出总和 s 和每一段的总和 s/3。问题就转变为一共有多少种选法,使得每一段的和都是 s/3。我们可以先确定后面的点,让前面的总和是 2s/3,再选择前面的点,满足第一段是 s/3。我们再枚举的过程中,可以使用前缀和,计算出从起始点到每一段的前缀和,判断第一段前缀和是 s/3,第二段前缀和是 2s/3 即可。2. 实现代码#include <bits/stdc++.h>using namespace std;int n;int a[100005];long long res=0,cnt=0;int main(){cin>>n;for(int i=1;i<=n;i++){int x=0;cin>>x;a[i]=a[i-1]+x; //前缀和数组}if(a[n]%3!=0 || n<3){cout<<"0"<<endl;}else{for(int j=2;j<n;j++){if(a[j-1]==a[n]/3){cnt++;}if(a[j]==a[n]/3*2){res+=cnt;}}cout<<res;}return 0;}二、AcWing 3729. 改变数组元素(中等)

题目描述

给定一个空数组 VVV 和一个整数数组 a1,a2,…,ana_{1},a_{2},…,a_{n}a1​,a2​,…,an​。 现在要对数组 VVV 进行 nnn 次操作。 第 iii 次操作的具体流程如下:

从数组 VVV 尾部插入整数 0。将位于数组 VVV 末尾的 aia_{i}ai​ 个元素都变为 111(已经是 111 的不予理会)。

注意:

aia_{i}ai​ 可能为 0,即不做任何改变。aia_{i}ai​ 可能大于目前数组 V 所包含的元素个数,此时视为将数组内所有元素变为 111。 请你输出所有操作完成后的数组 VVV。

输入格式

第一行包含整数 TTT,表示共有 TTT 组测试数据。 每组数据第一行包含整数 nnn。 第二行包含 nnn 个整数 a1,a2,…,ana_{1},a_{2},…,a_{n}a1​,a2​,…,an​。

输出格式

每组数据输出一行结果,表示所有操作完成后的数组 VVV,数组内元素之间用空格隔开。

数据范围

1≤T≤200001≤T≤200001≤T≤20000 1≤n≤2×151≤n≤2×10^{5}1≤n≤2×105 ≤ai≤n0≤a_{i}≤n0≤ai​≤n 保证一个测试点内所有 nnn 的和不超过 2×152×10^{5}2×105。

输入样例

3 6 0 3 0 0 1 3 10 0 0 0 1 0 5 0 0 0 2 3 0 0 0

输出样例

1 1 0 1 1 1 0 1 1 1 1 1 0 0 1 1 0 0 0

具体实现

1. 实现思路由于我们每次操作都会加入一个数,在操作 i 次之后,新数组的长度就是 i,然后,再将当前数组的最后面的 ai 个数变成 1。由于第 i 次数组一共有 i 个,将后 ai 个数变为 1,也就是我们将是 i-ai+1 到 i 的区间内的 ai 个数全部变成 1,也就是这个区间内的数据操作一次。因此,我们可以开一个新数组与原数组长度相等,用以记录区间内数据操作的个数,因为 V 数组当中的 1 不会发生改变,所以,操作多次和操作一次的效果是相同的。最后,如果新数组当中的元素大于 0,那么 V 数组中对应的元素就是 1,如果新数组中的元素等于 0,那么 V 数组中对应的元素就是 0。2. 实现代码#include <bits/stdc++.h>using namespace std;const int N=200010;int n;int b[N];int main(){int T;cin>>T;while(T--){ cin>>n;memset(b,0,(n+1)*4);for(int i=1;i<=n;i++){int x;cin>>x;x=min(x,i); //如果x大于i的话就更新成i,因为此时是将数组内的所有元素变为1 int l=i-x+1,r=i; b[l]++;b[r+1]--;}for(int i=1;i<=n;i++){b[i]+=b[i-1];}for(int i=1;i<=n;i++){cout<<!!b[i]<<" ";}cout<<endl;}return 0;}三、AcWing 1460. 我在哪?(简单)

题目描述

农夫约翰出门沿着马路散步,但是他现在发现自己可能迷路了! 沿路有一排共 NNN 个农场。 不幸的是农场并没有编号,这使得约翰难以分辨他在这条路上所处的位置。 然而,每个农场都沿路设有一个彩色的邮箱,所以约翰希望能够通过查看最近的几个邮箱的颜色来唯一确定他所在的位置。 每个邮箱的颜色用 A..ZA..ZA..Z 之间的一个字母来指定,所以沿着道路的 NNN 个邮箱的序列可以用一个长为 NNN 的由字母 A..ZA..ZA..Z 组成的字符串来表示。 某些邮箱可能会有相同的颜色。 约翰想要知道最小的 KKK 的值,使得他查看任意连续 KKK 个邮箱序列,他都可以唯一确定这一序列在道路上的位置。 例如,假设沿路的邮箱序列为 ABCDABC 。 约翰不能令 K=3K=3K=3,因为如果他看到了 ABC,则沿路有两个这一连续颜色序列可能所在的位置。 最小可行的 KKK 的值为 K=4K=4K=4,因为如果他查看任意连续 444 个邮箱,那么可得到的连续颜色序列可以唯一确定他在道路上的位置。

输入格式

输入的第一行包含 NNN,第二行包含一个由 NNN 个字符组成的字符串,每个字符均在 A..ZA..ZA..Z 之内。

AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)(蓝桥杯咋样)

输出格式

输出一行,包含一个整数,为可以解决农夫约翰的问题的最小 KKK 值。

数据范围

1≤N≤1001≤N≤1001≤N≤100

输入样例

7 ABCDABC

输出样例

4

具体实现

1. 实现思路我们要找到一个最小的 K,使得字符串当中从 K 分开不存在两个相同的字符串。我们可以使用暴力解法,也就是 4 个 for 循环,第一重循环枚举每一个 K,第二重循环枚举第一个子串,第三重循环枚举第二个子串,第四重循环判断两个字串是否相同。2. 实现代码#include <bits/stdc++.h>using namespace std;int n;string str;int main(){ cin >> n >> str; for (int k = 1; k <= n; k ++ ) { bool flag = false; for (int i = 0; i + k - 1 < n; i ++ ) { for (int j = i + 1; j + k - 1 < n; j ++ ) { bool same = true; for (int u = 0; u < k; u ++ ) if (str[i + u] != str[j + u]) { same = false; break; } if (same) { flag = true; break; } } if (flag) break; } if (!flag) { cout << k << endl; break; } } return 0;}四、AcWing 3768. 字符串删减(简单)

题目描述

给定一个由 nnn 个小写字母构成的字符串。 现在,需要删掉其中的一些字母,使得字符串中不存在连续三个或三个以上的 xxx。 请问,最少需要删掉多少个字母? 如果字符串本来就不存在连续的三个或三个以上 xxx,则无需删掉任何字母。

输入格式

第一行包含整数 nnn。 第二行包含一个长度为 nnn 的由小写字母构成的字符串。

输出格式

输出最少需要删掉的字母个数。

数据范围

3≤n≤1003≤n≤1003≤n≤100

输入样例 1

6 xxxiii

输出样例 1

1

输入样例 2

5 xxoxx

输出样例 2

0

输入样例 3

10 xxxxxxxxxx

输出样例 3

8

具体实现

1. 实现思路我们利用 cnt 存储当前连续出现字符 x 的个数。若出现了一个字符 x,则 cnt 加一。若出现了一个其它字符,则 cnt 清零。若当前 cnt=3,说明遇到了连续三个 x,此时需要删除一次。特别地,此时删除最后一个字符 x 后,可能补位的字符仍为 x,如输入样例 3 所示。此时不能将 cnt 清零,而应该减一,然后继续遍历。2. 实现代码#include <bits/stdc++.h>using namespace std;int main(){int n;string s;cin>>n>>s;int res=0,cnt=0;for(int i=0;i<n;i++){if(s[i]=='x'){cnt++;if(cnt==3){cnt--;res++;}}else{cnt=0;}}cout<<res<<endl;return 0;}五、AcWing 3777. 砖块(简单)

题目描述

nnn 个砖块排成一排,从左到右编号依次为 1∼n1∼n1∼n。 每个砖块要么是黑色的,要么是白色的。 现在你可以进行以下操作若干次(可以是 0 次): 选择两个相邻的砖块,反转它们的颜色。(黑变白,白变黑) 你的目标是通过不超过 3n3n3n 次操作,将所有砖块的颜色变得一致。

输入格式

第一行包含整数 TTT,表示共有 TTT 组测试数据。 每组数据第一行包含一个整数 nnn。 第二行包含一个长度为 nnn 的字符串 sss。其中的每个字符都是 W 或 B,如果第 iii 个字符是 W,则表示第 iii 号砖块是白色的,如果第 iii 个字符是 B,则表示第 iii 个砖块是黑色的。

输出格式

每组数据,如果无解则输出一行 −1−1−1。 否则,首先输出一行 kkk,表示需要的操作次数。 如果 k>k>0k>0,则还需再输出一行 kkk 个整数,p1,p2,…,pkp_{1},p_{2},…,p_{k}p1​,p2​,…,pk​。其中 pip_{i}pi​ 表示第 iii 次操作,选中的砖块为 pip_{i}pi​ 和 pi+1p_{i+1}pi+1​ 号砖块。 如果方案不唯一,则输出任意合理方案即可。

数据范围

1≤T≤101≤T≤101≤T≤10 2≤n≤2002≤n≤2002≤n≤200

输入样例

4 8 BWWWWWWB 4 BWBB 5 WWWWW 3 BWB

输出样例

3 6 2 4 -1 0 2 2 1

具体实现

1. 实现思路并没有要求操作次数最少,因此,只需输出任意一组可成功操作的次数即可。最终的结果只有两种,要么全黑,要么全白, 两种情况可以依次枚举(任一情况都可)。同一个位置我们最多操作 1 次,因为操作两次的话就变回原样。并且,操作的顺序不影响最后的结果。其中,第一个砖块只能操作一次,所以,如果第一个砖块跟我们目标颜色相同的话,就不需要进行操作,如果不同的话,就一定会进行操作。第一个砖块是否操作是已经确定的了,第二个砖块也是同样的道理,后续皆同。因此在最后,如果最后一个砖块和目标颜色相同的话,就一定有解,如果不同的话就一定无解,这中间我们只需要操作 n-1 次。2. 实现代码#include <bits/stdc++.h>using namespace std;int n;string str;void update(char &c){if(c=='W'){c='B';}else{c='W';}}bool check(char c){vector<int>res;string s=str;for(int i=0;i<n-1;i++){if(s[i]!=c){update(s[i]);update(s[i+1]);res.push_back(i+1); //字符串从0开始,题目中从1开始}}if(s.back()!=c){return false;}cout<<res.size()<<endl;for(int x=0;x<res.size();x++){cout<<res[x]<<' ';}if(res.size()!=0){cout<<endl;}return true;}int main(){int T;cin>>T;while(T--){cin>>n>>str;if(!check('B')&&!check('W')){cout<<"-1"<<endl;}}return 0;}
本文链接地址:https://www.jiuchutong.com/zhishi/300116.html 转载请保留说明!

上一篇:【手把手带你学JavaSE】String类(下篇)(手把手教大家)

下一篇:【机器学习】9种回归算法及实例总结,建议学习收藏

  • oppo手机怎么给公交卡充值(oppo手机怎么给苹果手机传软件)

    oppo手机怎么给公交卡充值(oppo手机怎么给苹果手机传软件)

  • 荣耀play4pro外壳是玻璃材质吗(荣耀play4pro后盖是玻璃还是塑料)

    荣耀play4pro外壳是玻璃材质吗(荣耀play4pro后盖是玻璃还是塑料)

  • 红米k30pro卡槽在哪里(红米k30pro插卡口)

    红米k30pro卡槽在哪里(红米k30pro插卡口)

  • 苹果x可以微信分身吗(苹果x可以微信双开吗)

    苹果x可以微信分身吗(苹果x可以微信双开吗)

  • 抖音怎么看昨天的直播(抖音怎么看昨天的观看记录)

    抖音怎么看昨天的直播(抖音怎么看昨天的观看记录)

  • 手机显示无sim卡是怎么回事(手机显示无sim卡怎么解决)

    手机显示无sim卡是怎么回事(手机显示无sim卡怎么解决)

  • 手机出现蓝色斑点,并且不断扩大(手机出现蓝色斑点 怎么办?)

    手机出现蓝色斑点,并且不断扩大(手机出现蓝色斑点 怎么办?)

  • 等待揽收中是不是还没有发货(等待揽收状态)

    等待揽收中是不是还没有发货(等待揽收状态)

  • 光猫是路由器的意思吗(光猫路由器的作用)

    光猫是路由器的意思吗(光猫路由器的作用)

  • 怎么判断打印机主板有没有坏(怎么判断打印机是否可以无线连接)

    怎么判断打印机主板有没有坏(怎么判断打印机是否可以无线连接)

  • gx屏幕啥意思(屏幕gx是什么意思)

    gx屏幕啥意思(屏幕gx是什么意思)

  • 新iphone显示上次充电时间(iphone显示上次号码不可用,呼叫失效)

    新iphone显示上次充电时间(iphone显示上次号码不可用,呼叫失效)

  • 芒果tv能看央视直播吗

    芒果tv能看央视直播吗

  • 苹果x手机触摸不灵原因(苹果x手机触摸屏不灵)

    苹果x手机触摸不灵原因(苹果x手机触摸屏不灵)

  • 19款macpro和18款的区别(19款macbookpro和18款区别)

    19款macpro和18款的区别(19款macbookpro和18款区别)

  • 矢量图怎么做(logo矢量图怎么做)

    矢量图怎么做(logo矢量图怎么做)

  • 苹果隐藏照片怎么恢复(苹果隐藏照片怎么上锁)

    苹果隐藏照片怎么恢复(苹果隐藏照片怎么上锁)

  • 一加七有耳机插孔吗(一加7pro插耳机)

    一加七有耳机插孔吗(一加7pro插耳机)

  • 学电脑怎么学(o基础学电脑怎么学)

    学电脑怎么学(o基础学电脑怎么学)

  • qq小表情包小人在哪里(qq小人图表情)

    qq小表情包小人在哪里(qq小人图表情)

  • xsmax微信视频如何美颜(iphonexsmax微信视频没有声音怎么设置)

    xsmax微信视频如何美颜(iphonexsmax微信视频没有声音怎么设置)

  • 魅族dc调光在哪(魅族18dc调光)

    魅族dc调光在哪(魅族18dc调光)

  • vivox21怎么设置双系统(vivox21怎么设置家长模式)

    vivox21怎么设置双系统(vivox21怎么设置家长模式)

  • type-c什么意思(type-c叫什么)

    type-c什么意思(type-c叫什么)

  • 2023vue面试题(2021vue面试)

    2023vue面试题(2021vue面试)

  • 关于帝国CMS6.0功能解密之字段处理函数(帝国cms视频教程)

    关于帝国CMS6.0功能解密之字段处理函数(帝国cms视频教程)

  • 个人所得税专项附加扣除子女教育
  • 农产品的税率是9%吗
  • 支付与其他经营活动有关的现金公式
  • 成本计算账户期末一般有余额吗
  • 公司注销后持股要交税吗
  • 客户发票弄丢了应该如何补救
  • 注销股本对所有股票影响
  • 农产品抵扣计算题
  • 农民合作社交哪些税
  • 施工排水费是否属于措施费
  • 小规模纳税人增值税申报表怎么填
  • 企业安全生产费用提取标准 最新
  • 货运代理公司排名前十
  • 残保金是所有企业都交么
  • 水电费大于发票怎么处理?
  • 进项发票不够如何避税
  • 所得税汇算清缴扣除标准
  • 关于旅行社代订的通知
  • 企业取得的土地使用权应作为固定资产核算
  • 理财赎回本金没赎回利息咋办
  • 发票销货清单需要到税务局吗
  • 发票拍照打印出来能用吗
  • 契税和增值税的计税依据
  • 文件夹如何更改图标
  • 电子税务局变更办税人员怎么操作
  • 缴纳公积金个人没有扣款怎么回事
  • win10蓝牙怎么开ldac
  • 建筑工程给排水的内容
  • 公司注册资金存在风险吗
  • 经营性租赁与融资性租赁
  • 格里姆火山
  • 最薄的索尼微单
  • 成本核算流程会议记录
  • 混合销售会计处理
  • 正爬上唐娜·诺克沙滩的灰海豹,英格兰北林肯郡 (© Frederic Desmette/Minden Pictures)
  • php imagefill
  • PHP:imagecolorclosestalpha()的用法_GD库图像处理函数
  • 购车的车辆购置税怎么交
  • 外经证核销期限是多久
  • 存货捐赠视同销售的会计分录怎么做?
  • ajax跨域请求的原理是什么
  • Pytorch深度学习实战3-7:详解数据加载DataLoader与模型处理
  • 可供出售债权投资
  • 待抵扣进项税额的账务处理
  • 记账复核是谁
  • 进程 python
  • 服务费的开票项目是什么
  • 营运资金为正数说明企业什么
  • 电子税务局网开电子发票
  • 工程项目工资表
  • 企业自产自用的产品需要缴纳增值税吗
  • 进项税额转出是什么科目
  • 转租单位房子合法吗
  • 收到外币收入如何入账
  • 外币资本金入账汇率怎样选择
  • 出售辅助材料怎么做账
  • 未分配利润期初余额怎么录入
  • 进项税额转出怎么操作
  • 约当产量法下的加权平均法怎么算
  • sql比较数值大小
  • win10升级电脑
  • xp设置程序开机启动
  • linux 查看so
  • win8.1玩游戏卡
  • linux系统怎么访问网页
  • linux cp命令怎么用
  • html+css代码
  • unity控制相机旋转
  • angular.js
  • Unite Beijing 2015大型活动
  • c# for unity
  • 文件读写过程中,程序将直接与磁盘文件进行数据交换
  • flask框架官方文档
  • 国家税务局福建省电子税务
  • 怎样在网上打印社保证明
  • 我的宁夏灵活就业缴费失败
  • 征求意见稿 讨论稿 送审稿
  • 厂房原值如何核定
  • 代办营业执照代办人有什么法律责任
  • 2021税务零申报流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设