首页 > 其他分享 >acwing 砖块

acwing 砖块

时间:2023-02-20 18:02:41浏览次数:46  
标签:string swap str 砖块 操作 include check acwing

原题链接

image

题解

分析

image

  • 这道题目使目标字符串变为同一颜色,也就使只有两种情况 W/B
  • 因为操作时,操作i会将i+1也操作,所以总操作次数为n-1次
  • 如果不能变为全黑或全白 也就是check()函数,则输出-1
  • 当全部操作完后,如果最后一项颜色与第一项颜色不相同,那么就是无法全变色
  • swap函数用来更换值,其实也可以将swap(str[i+1])的功能也写入到swap函数里

代码

#include "string.h"
#include "iostream"
#include "vector"
using namespace std;
int n;
void swap(char &c){
    if(c=='B')c='W';
    else c='B';
}
bool check(string str,char c){
    vector<int>tmp;
    for(int i=0;i<n-1;i++){
        if(str[i]!=c){
            swap(str[i]);
            swap(str[i+1]);
            tmp.push_back(i);
        }
    }
    if(str.front()!=str.back())return false;
    else {
        cout<<tmp.size()<<endl;
        for(auto i:tmp)cout<<i+1<<' ';
        if(tmp.size())cout<<endl;
        return true;
    }
}
int main(){
   int T;
   cin>>T;
   string str;
    while (T--){
        cin>>n>>str;
        if(!check(str,'B')&&!check(str,'W'))cout<<"-1"<<endl;
    }
    return 0;
}

标签:string,swap,str,砖块,操作,include,check,acwing
From: https://www.cnblogs.com/ChengMao/p/17138394.html

相关文章

  • acwing 318. 划分大理石
      多重背包及优化#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+10;intc[N],S,n,f[N];intsolve(){ inti,j; S=0; memset(f,0,si......
  • acwing 316. 减操作
      类似背包f[i][sum]|=f[i-1][sum-a[i]],这里设置为1或-1 #include<bits/stdc++.h>usingnamespacestd;constintN=2e4+10;constintD=1e4;intn,m......
  • AcWing 3956. 截断数组 [前缀和]
    AcWing3956.截断数组[前缀和]原题链接讲解视频思路题意是将一串数字从中间切两刀分成三段。每一段的和都相等。要求这三段每一段的和都相等,那么总和肯定是3的倍数,......
  • 「AcWing学习记录」Dijkstra
    AcWing849.Dijkstra求最短路I原题链接朴素Dijkstra1.dis[1]=0,dis[i]=\(+\infty\)2.for(inti=0;i<n;i++)s:当前已确定最短距离的点t\(\leftarrow\)......
  • AcWing 372. 棋盘覆盖
    给n*n的方格图铺满1*2的长条,且某些位置不能铺,问最多能放多少个长条 #include<iostream>#include<queue>#include<vector>#include<cstring>usingnamespaces......
  • acwing 数组元素的目标和
    原题链接题解代码双指针#include"iostream"usingnamespacestd;constintN=100010;inta[N],b[N];intmain(){intn,m,x;cin>>n>>m>>x;for(i......
  • acwing 判断子序列
    原题链接题解分析使用双指针,o为数组1的指针,p为数组2的指针因为数组2要比数组1大,所以使p每次循环自增,当有相同值,使o自增,最后检查o是否已经遍历完毕即可代码#includ......
  • ACwing 区间最大公约数题解 线段树(附证明)
    算进区间最大公因数单点线段树 https://www.acwing.com/problem/content/247/题目:给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:Clrd,表......
  • AcWing95. 费解的开关(/思维题)
    原题原题解题目约束题解#include<iostream>#include<cstring>usingnamespacestd;constintN=11;charg[N][N];intdx[]={0,-1,0,1,0},dy[]={0......
  • AcWing788.逆序对的数量(Java)
    题目来源:https://www.acwing.com/problem/content/790/题目描述给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第i个和第j......