CF1800F Dasha and Nightmares 题解
分析
考虑枚举。
注意到第二个条件是必须要有
令
枚举字符
注:桶里的东西不能在
代码
#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define re register
#define il inline
#define PII pair<int,int>
#define x first
#define y second
il int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1; ch=getchar();}
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*f;
}
const int N=2e5+10,M=(1<<26);
int n;
bool cnt[N][26],cnt2[N][26];
int Cnt[N],num[M];
vector<int> d;
long long ans;
il void solve(){
n=read();
for(re int i=1;i<=n;++i){
string s;cin>>s;
for(re int j=0;j<s.size();++j) cnt[i][s[j]-'a']^=1,cnt2[i][s[j]-'a']=1;
for(re int j=0;j<26;++j) Cnt[i]+=(cnt[i][j]*(1<<j));
}
for(re int k=0;k<26;++k){
for(re int i=1;i<=n;++i)
if(!cnt2[i][k]){
int now=0;
for(re int c=0;c<26;++c) if(!cnt[i][c]&&c!=k) now+=(1<<c);
ans+=num[now],++num[Cnt[i]],d.push_back(Cnt[i]);
}
for(re int i=0;i<d.size();++i) --num[d[i]];
d.clear();
}
printf("%lld\n",ans);
return ;
}
signed main(){
// int t=read();while(t--)
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!