L1-011 A-B(13行代码AC!!)
立志用更少的代碼做更高效的表達
本題要求你計算A?B。不過麻煩的是,A和B都是字符串 —— 即從字符串A中把字符串B所包含的字符全刪掉,剩下的字符組成的就是字符串A?B。
輸入格式:
輸入在2行中先后給出字符串A和B。兩字符串的長度都不超過10?4?? ,并且保證每個字符串都是由可見的ASCII碼和空白字符組成,最后以換行符結束。
輸出格式:
在一行中打印出A?B的結果字符串。
輸入樣例:
I love GPLT! It’s a fun game!
aeiou
輸出樣例:
I lv GPLT! It’s fn gm!
思路分析
此題考查對gets或getline等逐行讀取方式的應用。
由于字符可能包括空格, 并且一定是在一行中輸入, 很顯然需要用到逐行讀取的方式。
scanf當然也可以,但不是最優(yōu)解, 對于本題來講,getline的效率顯然更高。
由于PTA不支持gets函數(shù), 因此我們只能采用getline函數(shù)逐行讀取。
讀取結束后,就是判定了,判定我沒有想到什么更好的辦法, 最優(yōu)解應該就是雙重循環(huán)了
這里其實有一個bug, 題給時間限制是150ms,1s可以處理的極限數(shù)據大概是1e8次。
而對于本題,如果采用極限數(shù)據, 也就是兩個子串都取到104的規(guī)模, 循環(huán)嵌套下的規(guī)模也大概在1e8。
因此按理來說是通過不了的。
后續(xù)看了下各個樣例的通過時間, 最慢的大概在50ms左右, 可見作者沒有設置極限的測試數(shù)據。
代碼展示
#include<bits/stdc++.h> using namespace std;char s1[10005], s2[10005]; int main() {cin.getline(s1, 10005);cin.getline(s2, 10005); // gets(s1); gets(s2);int len1 = strlen(s1), len2=strlen(s2);for(int i = 0; i < len2; i++) for(int j = 0; j < len1; j++) if(s1[j] == s2[i]) s1[j] = '\n';for(int i = 0; i < len1; i++) if(s1[i] != '\n') cout << s1[i]; return 0; }努力只能及格,拼命才能優(yōu)秀, 加油,陌生人!
總結
以上是生活随笔為你收集整理的L1-011 A-B(13行代码AC!!)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: L1-010 比较大小(8行代码AC!!
- 下一篇: L1-015 跟奥巴马一起画方块 (15