2 条题解

  • 0
    @ 2025-10-8 16:57:45
    #include<bits/stdc++.h>
    using namespace std;
    int L,n;
    string S,s[1005],ans[1005];
    
    inline bool check(int st,int id){
        for(int i=0;i<s[id].size();i++)
            if(S[st+i]!='?'&&S[st+i]!=s[id][i])
                return 0;
        return 1;
    }
    int main(){
        cin>>L>>n;
        cin>>S;
        for(int i=1;i<=n;i++) cin>>s[i];
        for(int i=1;i<=L;i++){
            for(int j=1;j<=n;j++){
                if(s[j].size()>i) continue;
                int st=i-s[j].size();
                if(st>0&&ans[st]=="") continue;
                if(check(st,j))
                    if(ans[i]==""||ans[i]>ans[st]+s[j])
                        ans[i]=ans[st]+s[j];
            }
        }
        cout<< ans[L] <<"\n";
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:57:39
      #include<bits/stdc++.h>
      using namespace std;
      int L,n;
      string S,s[1005],ans[1005];
      
      inline bool check(int st,int id){
          for(int i=0;i<s[id].size();i++)
              if(S[st+i]!='?'&&S[st+i]!=s[id][i])
                  return 0;
          return 1;
      }
      int main(){
      	cin>>L>>n;
      	cin>>S;
          for(int i=1;i<=n;i++) cin>>s[i];
          for(int i=1;i<=L;i++){
              for(int j=1;j<=n;j++){
                  if(s[j].size()>i) continue;
                  int st=i-s[j].size();
                  if(st>0&&ans[st]=="") continue;
                  if(check(st,j))
                      if(ans[i]==""||ans[i]>ans[st]+s[j])
                          ans[i]=ans[st]+s[j];
              }
          }
          cout<< ans[L] <<"\n";
          return 0;
      }
      • 1

      【模拟】还原密码[USACO11OPEN] Forgotten Password S

      信息

      ID
      1549
      时间
      1000ms
      内存
      128MiB
      难度
      4
      标签
      递交数
      31
      已通过
      18
      上传者