日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

错题-巨石迷阵

發布時間:2023/12/8 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 错题-巨石迷阵 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

巨石迷陣

問題描述

聽說這片土地埋藏著什么秘密,來到這片土地的人不計其數,有人說這里財寶無數,也有人說這里是上古文明留下來的遺跡。小 L 收集情報和資料很久了,只身一人歷經千辛萬苦終于來到了這片地域的中心地帶。突然,四周升起許多巨石,不出所料,面前的正是巨石迷陣。

你面前有 n 塊巨石排成一行,每個上面有一個大寫字母。
接下來有 m 個詢問,每一個詢問包含兩個數字 l,r ,對于每個詢問,你需要回答這個處于區間 [l,r] 的石塊上的字母是否每一個英文字母都至少出現了一次。

輸入格式

第一行一個整數 n , n≤5×105
第二行,一個長度為 n 的字符串
第三行,一個整數 m, m≤5×105
接下來的 m 行,每行兩個整數表示 l,r,1≤l≤r≤n

輸出格式

輸出包含 m 行,每行一個 YES ,或者 NO 。
分別表示是否每個字母都至少出現一次。

樣例輸入

30 AAABCDEFGHIJKLMNOPQRSTUVWXYZAA 5 1 26 2 27 3 28 4 29 5 30

樣例輸出

NO NO YES YES NO

題解

使用前綴和

以每一個字母出現的次數作為前綴和計算。在給出區間 l, r 后,就可以使用前綴和計算這個區間中每一個字母是否出現過至少一次。

例如:在字符串中下標為 i 的字母是 26 個子母中第 j 個字母,就把 str[i][j] 置為 1。

#include <bits/stdc++.h> using namespace std; typedef long long ll; ll str[500005][30] = {0}; int main() {ll n;cin >> n;string s;cin >> s;for (ll i = 0; i < n; i++)//在在字符串中下標為 i 的字母是 26 個字母中第 j 個字母,就把 str[i][j] 加上 1,這里為了后面的計算前綴和方便下標都是從1開始的str[i + 1][s[i] - 'A' + 1]++;for (ll i = 1; i <= 26; i++)//以每一個字母為單位計算出現次數前綴和for (ll j = 1; j <= n; j++)str[j][i] += str[j - 1][i];ll m;cin >> m;for (ll i = 0; i < m; i++){ll l, r;cin >> l >> r;bool check = true;for (ll j = 1; j <= 26; j++){if (str[r][j] - str[l - 1][j] == 0)//當出現這個字母在[l, r]范圍中都沒有出現過就判斷為NO并且可以直接退出循環{check = false;break;}}if (check)cout << "YES" << endl;elsecout << "NO" << endl;}return 0; }

總結

以上是生活随笔為你收集整理的错题-巨石迷阵的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。