Trang chủ Tin Học Lớp 9 c++ ạ Bài 10. GIẢI MÃ CHỮ VIẾT CỦA NGƯỜI...

c++ ạ Bài 10. GIẢI MÃ CHỮ VIẾT CỦA NGƯỜI MAIA Tên file: WRITING.CPP Công việc giải mã chữ viết của người MAIA là khó khăn hơn người ta tưởng nhiề

Câu hỏi :

c++ ạ Bài 10. GIẢI MÃ CHỮ VIẾT CỦA NGƯỜI MAIA Tên file: WRITING.CPP Công việc giải mã chữ viết của người MAIA là khó khăn hơn người ta tưởng nhiều. Trải qua hơn 200 năm mà người ta vẫn hiểu rất ít về các chữ viết này. Chỉ trong 3 thập niên gần đây do công nghệ phát triển việc giải mã này mới có nhiều tiến bộ. Chữ viết Maia dựa trên các ký hiệu nhỏ gọi là nét vẽ, mỗi nét vẽ tương ứng với một âm giọng nói. Mỗi từ trong chữ viết Maia sẽ bao gồm một tập hợp các nét vẽ như vậy kết hợp lại với nhiều kiểu dáng khác nhau. Mỗi nét vẽ có thể hiểu là một ký tự ta hiểu ngày nay. Một trong những vấn đề lớn khi giải mã chữ Maia là thứ tự đọc các nét vẽ. Do người Maia trình bày các nét vẽ này không theo thứ tự phát âm, mà theo cách thể hiện của chúng. Do vậy nhiều khi đã biết hết các nét vẽ của một từ rồi nhưng vẫn không thể tìm ra được chính xác cách ghi và đọc của từ này. Các nhà khảo cổ đang đi tìm kiếm một từ đặc biệt W. Họ đã biết rõ tất cả các nét vẽ của từ này nhưng vẫn chưa biết các cách viết ra của từ này. Vì họ biết có các thí sinh IOI'06 sẽ đến nên muốn sự trợ giúp của các sinh viên này. Họ sẽ đưa ra toàn bộ g nét vẽ của từ W và dãy S tất cả các nét vẽ có trong hang đá cổ. Bạn hãy giúp các nhà khảo cổ tính xem có bao nhiêu khả năng xuất hiện từ W trong hang đá. Yêu cầu: Hãy viết chương trình, cho trước các ký tự của từ W và dãy S các nét vẽ trong hang đá, tính tổng số khả năng xuất hiện của từ W trong dãy S, nghĩa là số lần xuất hiện một hoán vị các ký tự của dãy g ký tự trong S. Các ràng buộc 1 g 3.000, số nét vẽ trong W g |S| 3.000.000, |S| là số các nét vẽ của dãy S INPUT: WRITING.INP: Dòng 1: chứa 2 số g và |S| cách nhau bởi dấu cách. Dòng 2: chứa g ký tự liền nhau là các nét vẽ của từ W. Các ký tư hợp lệ là 'a'-'z' và 'A'-'Z'. Các chữ in hoa và in thường là khác nhau. Dòng 3: Chứa |S| ký tự là dãy các nét vẽ tìm thấy trong hang. Các ký tư hợp lệ là 'a'-'z' và 'A'-'Z'. Các chữ in hoa và in thường là khác nhau. OUTPUT: WRITING.OUT: Chứa đúng 1 số là khả năng xuất hiện của từ W trong dãy S. Ví dụ: WRITING.INP WRITING.OUT 4 11 cAda AbrAcadAbRa 2

Lời giải 1 :

#include<bits/stdc++.h>
using namespace std;
int n, m, dem=0;
string x,s;
vector<int> cs(52), cx(52);
int main ()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    cin >> x >> s;
//đếm tần số xuất hiện của các chữ cái in Hoa và in Thường trong xâu x.
    for(int i = 0; i < n; i++)
        if (x[i] >= 'A' && x[i] <= 'Z') cx[x[i] - 'A']++;
        else cx[x[i] - 'a' + 26]++;
    //Đếm tần số xuất hiện của các chữ cái in Hoa và in thường trong xâu s
    for(int i = 0; i < n; i++)
        if(s[i] >= 'A' && s[i] <= 'Z') cs[s[i] - 'A' ]++;
        else cs[s[i] - 'a' + 26]++;
    if (cx == cs) dem = 1;
    for(int i = n; i < m; i++)
    {
        if(s[i - n] >= 'A' && s[i - n] <= 'Z') cs[s[i - n] - 'A']--;
        else cs[s[i - n] - 'a' + 26]--;
        if(s[i] >= 'A' && s[i] <= 'Z') cs[s[i] - 'A']++;
        else cs[s[i] - 'a' + 26]++;
        if(cx == cs) dem++;
    }
    cout << dem << endl;
    return 0;

}

Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, chúng ta sắp phải bước vào một kỳ thi căng thẳng và sắp chia tay bạn bè, thầy cô. Áp lực từ kỳ vọng của phụ huynh và tương lai lên cấp 3 thật là lớn, nhưng hãy tin vào bản thân và giữ vững sự tự tin!

Nguồn :

sưu tập

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK