CF1800F 题解
Solution
考虑转化题目条件,因为要求字符串恰好有
。 。
于是考虑用一个 bitset
表示出每个字符串,即如果
#include<bits/stdc++.h>
#define ll long long
#define x first
#define y second
#define il inline
#define debug() puts("-----")
using namespace std;
typedef pair<int,int> pii;
const int N=2e5+10,M=26;
int n;
int f[N][M];
string s[N];
int mp[1<<M];
bool st[N][M];
il void work(){
cin>>n; ll ans=0;
for(int i=1;i<=n;i++){
cin>>s[i];
for(int j=0;j<M;j++) f[i][j]=0;
for(int j=0;j<s[i].size();j++) f[i][s[i][j]-'a']++,st[i][s[i][j]-'a']=true;
} for(int k=0;k<M;k++){
for(int i=1;i<=n;i++){
if(st[i][k]) continue; int num=0;
for(int j=0;j<M;j++) if(f[i][j]&1) num+=(1<<j);
mp[num]++;
} for(int i=1;i<=n;i++){
if(st[i][k]) continue; int num=0;
for(int j=0;j<M;j++) if(j!=k&&(!(f[i][j]&1))) num+=(1<<j);
ans+=1ll*mp[num];
} for(int i=1;i<=n;i++){
if(st[i][k]) continue; int num=0;
for(int j=0;j<M;j++) if(f[i][j]&1) num+=(1<<j);
mp[num]--;
}
} printf("%lld\n",ans/2);
}
signed main(){
int T=1;
while(T--) work(); return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】