Dasha and Nightmares 题解
一道字符串题。
既然两个字符串拼接后有一种字符不能出现,那么可以枚举这个字符,我们就只需要关注没有出现过这种字符的字符串了。
剩下的字符串仅会出现
那么接下来题目就转变为有多少对 std :: map
统计。
Code
#include <bits/stdc++.h>
const long long IMX = 1ll << 30;
const long long LMX = 1ll << 60;
typedef long long ll;
typedef __int128 i128;
typedef long double ld;
typedef __float128 f128;
namespace xvl_ {
#define SP(n, x) std :: setprecision(n) << std :: fixed << x
#define REP(i, l, r) for (auto i = (l); i <= (r); i ++)
#define PER(i, r, l) for (auto i = (r); i >= (l); i --)
#define DEBUG(x) std :: cerr << #x << " = " << x << '\n'
template <typename T> T Max(T a, T b) { return a > b ? a : b; } template <typename T, typename... Args> T Max(T a, Args... args) { return a > Max(args...) ? a : Max(args...); }
template <typename T> T Min(T a, T b) { return a < b ? a : b; } template <typename T, typename... Args> T Min(T a, Args... args) { return a < Min(args...) ? a : Min(args...); }
}
using namespace std;
using namespace xvl_;
ll n, ans;
ll cnt[200005][26];
string s[200005];
vector <ll> x;
map <ll, ll> mp;
int main() {
// freopen("InName.in", "r", stdin);
// freopen("OutName.out", "w", stdout);
ios :: sync_with_stdio(0);
cin.tie(nullptr);
cin >> n;
REP(i, 1, n) {
cin >> s[i];
REP(j, 0, s[i].size() - 1) cnt[i][s[i][j] - 'a'] ++;
}
REP(c, 0, 25) {
mp.clear(), x.clear();
REP(i, 1, n) {
if (cnt[i][c]) continue;
x.push_back(0);
REP(j, 0, 25) {
if (j == c) continue;
x[x.size() - 1] = (x[x.size() - 1] << 1) | (cnt[i][j] & 1);
}
}
for (auto v : x) {
mp[v] ++;
ans += mp[v ^ (1 << 25) - 1];
}
}
cout << ans;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】