等價串 解題報告

2021-08-20 19:28:08 字數 1187 閱讀 9693

牛客小白月賽4 --f等價串--解題報告

題目描述 

一串長度為 n 的字串 a 和一串長度為 m 的字串 b。並且這兩串字串只會含有 0 或 1 。

鐵子可以對字串 a 執行兩種操作,兩種操作可以執行任意次。

操作1(無情替換):鐵子可以用 11 替換掉 0 ,也可以用 00 替換掉 1 .

操作2(極限刪除):鐵子可以刪除掉 111 ,也可以刪除 000 .

現在問,字串 a 可以變成字串 b 嗎?

輸入描述:

第一行有乙個整數t,表示有t(1<=t<=1000)組測試資料。

接下來的每組資料,第一行有兩個整數n,m(1<=n,m<=100),表示字串a和字串b的長度。

接下來有兩行字串,分別表示字串a和字串b。

輸出描述:

對於每組測試資料,如果字串a可以變為字串b,則輸出一行」yes」,否則輸出一行」no」.輸出不包括引號。

示例1輸入

33 4

0101110

3 4010

1111

7 20001000

00輸出

yesno

yes說明對於第乙個樣例,鐵子可以對字串a使用一次無情替換可以變成1110

解題思路:很明顯這是乙個有關字串的題目(也就是對string的靈活運用)

這裡牽涉的string的知識點有:

字串的查詢---------find()

字串的替換---------replace()

字串的刪除----------erase()

題目中的兩個操作其實可以看成是兩種操作:

1.以用 11 替換掉 0,後在可以刪除掉 111 ,也可以刪除 000 

2.用 00 替換掉 1,後在可以刪除掉 111 ,也可以刪除 000

這裡不難發現如果對a,b字串進行這兩種操作,那麼就會產生16種相對應的操作(4*4)

這裡可以簡化問題將a,b中的字串中的0都替換成1,然後在刪除111,然後比較a,b是否相等

從而可以得出a是否可以轉化為b

下面附上我的**:

#include

using namespace std;

int main()

else

}return 0;

}

等價表示式 解題報告

等價表示式 noip2005提高組 time limit 10000ms memory limit 65536k description 明明進了中學之後,學到了代數表示式。有一天,他碰到乙個很麻煩的選擇題。這個題目的題幹中首先給出了乙個代數表示式,然後列出了若干選項,每個選項也是乙個代數表示式,題...

對稱數串的解題報告

有n個數字,如果這串數字順序第i個數字和逆序第i個數字總是相等的 i n 2 那麼我們稱這n個數字為迴圈數串 輸入一堆數 帶入迴圈 開始判斷 輸出是或否 include 庫檔案 using namespace std 命名空間 int a 100 b,j,k,i,sum,sign,n 定義變數和陣列...

解題報告 NOIP2015 子串

這是一道dp題,然後來想想怎麼表示狀態,對答案有影響的就是a串的第i個字元,b串的第j個字元,和k個子串,簡單來說就是和選取的字元和子串的數量有關.那麼設 f i j kk 表示在a串的前i個字元中選kk個子串匹配b串的前j個字元的方案數.求方案數可以採用加法原理,考慮a串的第i個字元,那麼這個字元...