csp版, 为什么WA了啊, 求调
查看原帖
csp版, 为什么WA了啊, 求调
970336
MagicLyney_06楼主2023/10/23 11:58
/**
 * @Author: lndff
 * @Date: 2023/10/23 09:54:16
 * @LastEditors: lndff
 * @LastEditTime: 2023/10/23 09:54:16
 * Description: 
 * Copyright: Copyright (©)}) 2023 lndff. All rights reserved.
 */
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define int LL
const int N = 2e6 + 10;

map<pair<LL, LL>, LL>hax;
int n;
LL ans;
stack<char>st;
char s[N];
const int quan1 = 31;
const LL MOD1 = 2062122777777;
const LL inv1 = 465640627240;
const int quan2 = 101;
const LL MOD2 = 20621229997;
const LL inv2 = 13679429800;
LL yaw1, yaw2;
signed main(){
    freopen("game.in","r",stdin);
    freopen("game.out","w",stdout);
    scanf("%d", &n);
    scanf("%s", s + 1);
    hax.insert(make_pair(make_pair(0, 0), 1));
    for (int i = 1; i <= n; i++){
        bool tag = 1;
        if (!st.empty()){
            if (st.top() == s[i]){
                st.pop();
                tag = 0;
                yaw1 = ((yaw1 - (s[i] - 'a' + 1) * quan1) + MOD1) % MOD1;
                yaw1 = (yaw1 * inv1) % MOD1;
                yaw2 = ((yaw2 - (s[i] - 'a' + 1) * quan2) + MOD2) % MOD2;
                yaw2 = (yaw2 * inv2) % MOD2;
            }
        }
        if (tag){
            st.push(s[i]);
            yaw1 = (yaw1 * quan1) % MOD1;
            yaw1 = (yaw1 + (s[i] - 'a' + 1) * quan1) % MOD1;
            yaw2 = (yaw2 * quan2) % MOD2;
            yaw2 = (yaw2 + (s[i] - 'a' + 1) * quan2) % MOD2;
        }
        pair<LL, LL> PLL = make_pair(yaw1, yaw2);
        ans += hax[PLL];
        // cout << ans << " " << i << " ";
         hax[PLL]++;
        // cout << "!";
    }
    printf("%lld", ans);
    return 0;
}
2023/10/23 11:58
加载中...