Olympic Sinh Viên 2024 - Không chuyên - Đố vui

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 1G

Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 1
    pppssslc  đã bình luận lúc 22, Tháng 5, 2025, 9:53 sửa 3
    Spoil!!!

    Nếu độ dài là chẵn thì:

    In ra "No Solution" luôn.

    Nếu độ dài là lẻ:

    • Ta xét 2 trường hợp: kí tự được chèn vào nửa trước hoặc nửa sau của dãy.
    • TH1: nửa trước
    • Đặt một biến tmp là 0.
    • Duyệt i từ 0 tới (n-1)/2-1.
    • Nếu s[i] ≠ s[i+(n-1)/2+tmp]: Tăng tmp lên 1.
    • Nếu tmp > 1 thì trường hợp 1 không có kết quả.
    • TH2: nửa sau

    Tương tự trường hợp 1

    • Nếu 2 trường hợp ra kết quả khác nhau thì đáp án là "Multiple Solutions".
    • Nếu 0 trường hợp nào ra kết quả thì đáp án là "No Solution".
    • Các trường hợp còn lại in ra kết quả.

    Code mẫu:

    #include<bits/stdc++.h>
    #define str string
    #define ll long long
    #define db double
    #define pii pair<int, int>
    #define piii pair<int, pii>
    #define piiii pair<pii, pii>
    #define se second
    #define fi first
    #define vi vector<int>
    #define vii vector<vector<int>>
    #define mpii map<int, int>
    #define umpii unordered_map<int, int>
    #define si set<int>
    #define usa unordered_set<int>
    #define mulsi multiset<int>
    using namespace std;
    
    const int mod=1e9+7;
    const int maxn=1e5+1;
    
    int main(){
        ios_base::sync_with_stdio(0);
        cin.tie(0); cout.tie(0);
        str s, ans="No Solution"; int n; cin>>n>>s;
        if(n%2==0){
            cout<<"No Solution";
            return 0;
        }
        int tmp=0;
        str tmp1="";
        for(int i=0; i<n/2; ++i){
            if(s[i]!=s[i+n/2+tmp] && tmp==0){
                --i;
                ++tmp;
            }else if(s[i]!=s[i+n/2+tmp] && tmp==1){
                tmp1="";
                break;
            }else tmp1+=s[i];
        }
        if(tmp1!="")ans=tmp1;
        tmp=0; tmp1="";
        for(int i=0; i<n/2; ++i){
            if(s[i+tmp]!=s[i+n/2+1] && tmp==0){
                --i;
                ++tmp;
            }else if(s[i+tmp]!=s[i+n/2+1] && tmp==1){
                tmp1="";
                break;
            }else tmp1+=s[i+tmp];
        }
        if(tmp1!=""){
            if(ans!="No Solution" && ans!=tmp1)ans="Multiple Solutions";
            else ans=tmp1;
        }
        cout<<ans;
        return 0;
    }
    

  • -19
    AnonymousExe  đã bình luận lúc 9, Tháng 1, 2025, 12:01

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.