码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-11-11 18:24:49      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:lse   for   else   二维   while   bit   def   --   cout   

技术图片

 

题意:给出一个字符串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<<\n;
50     }
51     return 0;
52 }

 

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

标签:lse   for   else   二维   while   bit   def   --   cout   

原文地址:https://www.cnblogs.com/pengge666/p/11837124.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!