• codeforces 1045I Palindrome Pairs 【stl+构造】


    题目:戳这里

    题意:给1e5个字符串,问有多少对字符串组合,满足最多只有一种字符有奇数个。

    解题思路:每种情况用map存一下就行了。感觉这题自己的代码思路比较清晰,所以写个题解记录一下

    附ac代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 2e5 + 10;
     5 const ll mod = 998244353;
     6 int arr[33];
     7 int nu[maxn];
     8 int now;
     9 string st;
    10 map<int, int> mp;
    11 int main() {
    12     ios::sync_with_stdio(false);
    13     int n;
    14     cin>>n;
    15     for(int i = 1; i <= n; ++i) {
    16         memset(arr,0,sizeof(arr));
    17         cin>>st;
    18         now=0;
    19         for(int j = 0; j < st.size(); ++j) {
    20             arr[st[j]-'a']++;
    21         }
    22         for(int j = 0; j < 26; ++j) {
    23             if(arr[j]&1) now += 1<<j;
    24         }
    25         ++mp[now];
    26         nu[i] = now;
    27     }
    28 
    29     int od = 0;
    30     ll ans = 0;
    31 
    32     for(int i = 1; i <= n; ++i) {
    33         od = 0;
    34         for(int j = 0; j < 26; ++j) {
    35             if(nu[i]&(1<<j)) ++od;
    36         }
    37         if(od == 0) {
    38             ans += mp[nu[i]] - 1;
    39             for(int j = 0; j < 26; ++j) {
    40                 ans += mp[1<<j];
    41             }
    42         }
    43         else {
    44             ans += mp[nu[i]] - 1;
    45             for(int j = 0; j < 26; ++j) {
    46                 ans += mp[nu[i]^(1<<j)];
    47             }
    48         }
    49     }
    50     printf("%lld
    ", ans / 2ll);
    51     return 0;
    52 }
    View Code
  • 相关阅读:
    python
    python
    gitlab
    nodejs
    java
    ElasticSearch 安装与配置 (windows)
    shell脚本批量注释
    C获取系统中CPU核数
    linux内核内存管理
    perf: interrupt took too long (3136 > 3126), lowering kernel.perf_event_max_sample_rate to 63000
  • 原文地址:https://www.cnblogs.com/zmin/p/9910525.html
Copyright © 2020-2023  润新知