ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

acwing第65场周赛

2022-08-21 22:01:29  阅读:141  来源: 互联网

标签:周赛 cnt 92 int 65 哈希 include acwing


1.最大价值

原题链接:https://www.acwing.com/problem/content/4606/

思路

经典双指针

代码:

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

int main()
{
    int n;
    cin >> n;
    while(n --)
    {
        int slen;
        string s;
        cin >> slen >> s;
        
        int ans = 0;
        for(int i = 0; s[i]; i ++)
        {
            int j = i + 1;
            int cnt = 0;
            if(s[i] == 'A')
            {
                while(s[j ++] == 'P') cnt ++;
                ans = max(ans,cnt);
            }
        }
        cout << ans << endl;
    }
    
    return 0;
}

2.集合查询

原题链接:https://www.acwing.com/problem/content/4607/

视频讲解:https://www.acwing.com/video/4244/

思路

存数的时候,可以存他所对应的01串模板,比如92、2212就存010.
其实就是,求一个新的二进制串,把92枚举每一位,如果是奇数就把二进制串后面加个1,如果是偶数就把二进制串后面加个0.

枚举92每一位,可以把92转换成对应的模板二进制串,用十进制来存x = x*2 + str[i] % 2;('0'对应的ascii码为48所以直接使用str[i]%2是奇数还时偶数,奇数结果就是1,偶数结果就是0)

查询操作也可以通过x = x*2 + str[i]%2来将模板字符串转化成相对应的十进制数

用哈希表来存

如果插入一个数,就让哈希表中该数的数量+1
如果删除一个数,就让哈希表中该数的数量-1
如果查询一个数,就用哈希表直接查询符合条件的数的数量

注意

此题可以用cnt数组代替哈希表
x取值范围是\([0,10^{18})\)
s串的长度是\([1,18]\),所以数组的大小为\(1<<18\)

代码

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

const int N = 1 << 18;

int n;
int cnt[N]; 

int main()
{
    int n;
    scanf("%d",&n);
    
    while(n --)
    {
        char op[2],str[20];
        scanf("%s%s",op,str); // 操作符用%s来读取不容易出错
        int x = 0; // 对应的二进制数(使用十进制来保存)
        for(int i = 0; str[i]; i ++)
        {
            x = x * 2 + str[i] % 2;
        }
        
        if(*op == '+') cnt[x] ++; // 字符来判断 op[0] == '+'
        else if(*op == '-') cnt[x] --;
        else printf("%d\n",cnt[x]);
    }
    
    return 0;
}

标签:周赛,cnt,92,int,65,哈希,include,acwing
来源: https://www.cnblogs.com/rdisheng/p/16608660.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有