zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    软件工程概论课后作业2
    第三周进度表
    软件工程概论课后作业1
    第二周进度表
    9.异常处理
    《构建之法》阅读笔记二
    《构建之法》阅读笔记一
    第五周进度表
    软件工程个人作业03
    第四周进度表
  • 原文地址:https://www.cnblogs.com/pengge666/p/11837124.html
Copyright © 2011-2022 走看看