| 比赛 |
期末考试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;
}