汉中市网站建设_网站建设公司_JavaScript_seo优化
2026/1/3 2:46:58 网站建设 项目流程

1.练习项目:

问题描述

小明得到了一个长度为 n 的字符串 s ,该字符串都是由数字 0 和 1 组成,并且下标从 1 开始,小明现在需要对这个字符串进行 q 次操作,每次操作包含以下两种操作之一:

  • 操作 1 :小明查询该字符串中第一次出现 1 的位置,并将其输出,如果字符串中不存在 1 则输出 −1

  • 操作 2 :小明选择一个下标,将字符串 s 中对应该下标的值反转,即 1 变为 0 ,0 变为 1 。

小明想在短时间内快速计算出每次操作二的值,你能帮帮他吗。

输入格式

第一行,包含两个正整数 n,q (1≤n,q≤2×1e5),分别代表字符串长度和操作次数。

第二行,一个字符串 s (1≤∣s∣≤n) ,代表输入的字符串。

接下来 q 行,每行输入格式为一下之一:

  • 1,代表小明要查询该字符串中第一次出现 1 的位置,并将其输出。
  • 2 x,代表将字符串中下标为 x 的字符反转。

输出格式

对于每个操作 1 ,小明都会输出一行,包含一个正整数,代表该字符串中第一次出现 1 的位置,如果字符串中不存在 1 则输出 −1

2.选择课程

在蓝桥云课中选择课程《16届蓝桥杯省赛无忧班(C&C++ 组)4期》,选择第STL”编程10并开始练习。

3.开始练习

(1)源码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5;
char s[N];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,q;
cin>>n>>q;
cin>>s+1;
while(q--){
char type;
cin>>type;
if(type=='1'){
for(int i=1;i<=n;i++){
if(s[i]=='1'){
cout<<i<<'\n';
break;
}else if(s[i]=='0'){
continue;
}else{
cout<<-1;
}
}
}else{
int temp;
cin>>temp;
if(s[temp]=='1'){
s[temp]='0';
}else{
s[temp]='1';
}
}
}
return 0;
}

(2)检验结果

对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。

(3)练习心得:注意每段代码末尾的分号是否存在,如不存在则需即使补充;输入法是否切换为英语模式;语法是否错误。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询