熱門文章

2025年8月1日 星期五

ZeroJudge 解題筆記:b759. 我明明就有說過= =

作者:王一哲
日期:2025年8月1日


ZeroJudge 題目連結:b759. 我明明就有說過= =

解題想法


這題可以只用字串切片或是索引值組合出每次要印出的內容,也可以每次都更新字串的內容,兩種方法的速度都很快。

Python 程式碼


使用時間約為 21 ms,記憶體約為 3.3 MB,通過測試。
X = input()
for i in range(len(X)):
    print(X[i:]+X[:i])

每次印出字串後,重新組合字串。使用時間約為 20 ms,記憶體約為 3.3 MB,通過測試。
X = input()
for i in range(len(X)):
    print(X)
    X = X[1:] + X[0]


C++ 程式碼


使用時間約為 4 ms,記憶體約為 360 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;

int main() {
	ios::sync_with_stdio(0); cin.tie(0);
    string X; cin >> X;
    for(size_t i=0; i<X.size(); i++)
        cout << X.substr(i, X.size()-i) << X.substr(0, i) << "\n";
    return 0;
}

每次印出字串後,重新組合字串。使用時間約為 4 ms,記憶體約為 332 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;

int main() {
    string X; cin >> X;
    for(size_t i=0; i<X.size(); i++) {
        cout << X << "\n";
        X = X.substr(1, X.size()-1) + X.substr(0, 1);
    }
    return 0;
}

用 algorithm 函式庫中的 rotate 函數,每次印出字串後,將字串中每個字元依序向左移動一格。。使用時間約為 4 ms,記憶體約為 332 kB,通過測試。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string X; cin >> X;
    for(size_t i=0; i<X.size(); i++) {
        cout << X << "\n";
        rotate(X.begin(), X.begin()+1, X.end());
    }
    return 0;
}


沒有留言:

張貼留言