Educational Codeforces Round 67 (Rated for Div. 2) B题前缀+二分补题ING系列

Posted pengge666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Educational Codeforces Round 67 (Rated for Div. 2) B题前缀+二分补题ING系列相关的知识,希望对你有一定的参考价值。

技术图片

 

题意:给出一个字符串s, 可以从左往右拿走s的字符, 至少要到s的第几个位置才能拼成t

思路:用二维数组记录前缀,然后二分即可.

 1 #include<bits/stdc++.h>
 2  
 3 using namespace std;
 4 #define inf 5000000
 5 #define N 210050
 6 int sum[N][30];
 7 int arr[30];
 8 string s;
 9 string str;
10 int n;
11 bool slove(int id) {
12     for(int i=0; i<26; i++)
13         if(arr[i]-sum[id][i]>0)
14             return false;
15     return true;
16 }
17 int main() {
18     cin>>n;
19     cin>>str;
20     int _;
21     cin>>_;
22     for(int i=0; i<str.size(); i++) {
23         ++sum[i][str[i]-a];
24         if(i!=0) {
25             for(int j=0; j<26; j++) {
26                 sum[i][j]+=sum[i-1][j];
27             }
28         }
29     }
30     while(_--) {
31         cin>>s;
32         for(int i=0; i<=26; i++)
33             arr[i]=0;
34         for(int i=0; i<s.size(); i++) {
35             arr[s[i]-a]++;
36         }
37         int l=0;
38         int r=n;
39         int ans=inf;
40         while(l<=r) {
41             int mid=(l+r)/2;
42             if(slove(mid)) {
43                 r=mid-1;
44                 ans=min(ans,mid);
45             } else {
46                 l=mid+1;
47             }
48         }
49         cout<<ans+1<<
;
50     }
51     return 0;
52 }

 

以上是关于Educational Codeforces Round 67 (Rated for Div. 2) B题前缀+二分补题ING系列的主要内容,如果未能解决你的问题,请参考以下文章

Educational Codeforces Round 7 A

Educational Codeforces Round 7

Educational Codeforces Round 90

Educational Codeforces Round 33

Codeforces Educational Codeforces Round 54 题解

Educational Codeforces Round 27