2025-09-20 2026-05-04 题目传送门 思路: 先输入三个整数和 DDD 个单词; 重复 NNN 次: 输入一个字符串 TTT; 处理字符串:用一个二维数组 GGG,用于记录每一位有哪些字母可以用,然后遍历字符串,如遇 ( 则重复将后面的所有字符统计到这一位,直到遇到 ) 为止,否则直接将该字符统计到这一位即可; 遍历每一个单词,如果该单词的每一位都是可用字母,那么 ans+1ans + 1ans+1; 输出; AC code: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include<bits/stdc++.h>using namespace std;int l,d,n,s,ans;string t,a[5005];bool g[505][30],q;int main(){ cin>>l>>d>>n; for(int i=1;i<=d;i++) { cin>>a[i]; } for(int i=1;i<=n;i++) { cin>>t; //初始化变量和数组 s=0; //位数 ans=0; //答案 memset(g,false,sizeof(g)); for(int j=0;j<t.size();j++) { if(t[j]=='(') //遇到括号时 { while(t[++j]!=')')//重复直到遇到右括号 { //设置为true(可用) g[s][t[j]-'a']=true; } s++; //注意是在同一位上,需要等括号内内容统计完再让位数+1 } else { //直接设置一个字母为true(可用) g[s++][t[j]-'a']=true; } } for(int j=1;j<=d;j++) { q=true; //标记 for(int k=0;k<l;k++) { if(!g[k][a[j][k]-'a']) { q=false; break; //不符合直接退出 } } if(q) { ans++; //答案+1 } } //输出 cout<<"Case #"<<i<<": "<<ans<<endl; } return 0;} 前一篇 P14127 [SCCPC 2021] K-skip Permutation 题解 后一篇 P13426 [COCI 2020/2021 #2] Crtanje 题解
说些什么吧!