比赛 期末考试0 评测结果 AATTTTTTTT
题目名称 学姐的下午茶 最终得分 20
用户昵称 张雨晴 运行时间 16.969 s
代码语言 C++ 内存使用 3.58 MiB
提交时间 2026-02-07 11:23:15
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,sum,cnt,num;
const int P=1e9+7;
int m=0;
int tree[4005][2];
int ans[4005];
int b[4005];
vector<string>a;
typedef pair<int,int> PII;
vector<PII>v;
void insert(string s){
    int len=s.size();
    int p=0;
    for(int i=0;i<len;i++){
        int v=s[i]-'0'+1;
        if(tree[p][v]==0){
            tree[p][v]=++num;
            cnt++;
//            cout<<p<<" "<<v<<"\n";
        }
        p=tree[p][v];
    }
}
void dfs(int s){
    if(s==m){
        num=0;
        memset(tree,0,sizeof(tree));
        for(int i=0;i<m;i++){
            a[v[i].first][v[i].second]=char(ans[i]+48);
            
        }
        cnt=1;
        for(int i=0;i<n;i++){
            insert(a[i]);
        }
//        cout<<cnt<<"\n";
        sum+=cnt;
        sum%=P;
        return ;
    }
    for(int i=0;i<=1;i++){
        ans[s]=i;
        dfs(s+1);
    }
}
int main(){
    freopen("lowtea.in","r",stdin);
    freopen("lowtea.out","w",stdout);
    
    cin>>n;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        a.push_back(s);
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<a[i].size();j++){
            if(a[i][j]=='?'){
//                a[i][j]='3';
                v.push_back({i,j});
            }
        }
    }
    m=v.size();
    dfs(0);
    cout<<sum%P;
    return 0;
}