NITACMOJ144稳定串


点我》》 题目链接

稳定串

Time Limit:  1000ms
Memory Limit:  65536KB
64-bit integer IO format:  %lld      Java class name:  Main
Type:    None 图论     2-SAT      割点/桥/双连通分量      环/拓扑排序/强连通分量     最短路          Bellman Ford         Dijkstra/Floyd Warshall      欧拉回路/路径      差分约束     最小生成树      稳定婚姻问题     树      最小树形图     网络流/匹配          一般图匹配             二分匹配              Hopcroft–Karp算法             Weighted Bipartite Matching/匈牙利算法          网络流              最大流/最小割             最小费用最大流  搜索     基础递归      BFS/DFS     回溯剪枝/分支限界      IDA* Search     Parsing/Grammar      Advanced Search Techniques         二分查找/二分          三分查找  几何     基础几何      计算几何     凸包      Pick定理     旋转卡壳      半平面交 博弈      Green Hackenbush/Colon Principle/Fusion Principle      Nim     SG函数  矩阵     高斯消元      矩阵快速幂 数据结构      基础数据结构     树状数组      二叉搜索树     Hashing      Orthogonal Range Search     RMQ/LCA      线段树     字典树      排序     并查集  字符串     KMP      AC自动机     后缀数组/后缀树      Manacher 数学      基础数学     大整数运算      数论         中国剩余定理          扩展欧几里德算法         容斥原理          模运算     排列组合          Group Theory/Burnside's lemma         Counting      概率/期望      欧拉函数     乘法逆元      莫比乌斯反演     快速傅里叶变换      调和级数     快速幂  动态规划     基础DP      背包问题     区间DP      概率DP     状压DP      数位DP     树形DP      插头DP     斜率优化  Others     Tricky      Hardest     Unusual      Brute Force     Implementation      Constructive Algorithms     Two Pointer      Bitmask     Beginner      Discrete Logarithm/Shank's Baby-step Giant-step Algorithm      贪心     分治法                   Tag it!
一个字符串被称为稳定串当且仅当它包含的字母出现的次数全是偶数次。现在小王遇到一个难题,他手中有一个字符长度不大于10W的字符串,你能帮助他判断是否为稳定串吗?

Input

首先输入一个t,代表t组数据,每组数据输入一个字符串s(1≤strlen(s)≤105,仅包含小写字母和大写字母),之后再输入一个m,代表着m次询问,每次询问输入两个数l,r,代表以l位置开头r位置结尾的字符串。(1≤m≤105,1≤l≤r≤105)。

Output

对于每次询问,如果该串是稳定串,输出"Yes",否则输出"No"。

Sample Input

2
aaaabbbb
2
1 8
1 7
aaAA
2
1 4
2 3

Sample Output

Yes
No
Yes
No

Source

Author

skymiange


不错哟~
卡掉了前缀和;
然后各种方法?
QAQ:
 比如子树的字母能不能凑成一个回文,树上的链能不能打乱凑一个回文。

这里就是利用二进制的异或和奇偶对应起来搞;

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

const int N=1e5+10;
map<int,LL>mp;
LL f[55];

char str[N];
LL vis[N];
int sum[N];

void init()
{
    f[0]=1;
    for(LL i=1;i<=52;i++)
        f[i]=f[i-1]*2;
    int num=0;
    for(int i='a';i<='z';i++)
        mp[i]=f[num++];
    for(int i='A';i<='Z';i++)
        mp[i]=f[num++];
}

int main()
{
    init();
    int T,len;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",str+1);
        len=strlen(str+1);
        LL temp=0;
        vis[0]=0;
        for(int i=1;i<=len;i++)
        {
            temp=temp^mp[str[i]];
            vis[i]=temp;
        }

        int Q,u,v;
        scanf("%d",&Q);
        while(Q--)
        {
            scanf("%d%d",&u,&v);
            if(u>v)
                swap(u,v);
            if(vis[v]==vis[u-1])
                puts("Yes");
            else
                puts("No");
        }
    }
    return 0;
}



转载于:https://www.cnblogs.com/keyboarder-zsq/p/6777523.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值