首页 > 其他分享 >练习记录- AtCoder Beginner Contest 295(D)

练习记录- AtCoder Beginner Contest 295(D)

时间:2023-04-09 17:13:23浏览次数:45  
标签:AtCoder const Beginner Contest int ll long mp 读入

vp的 觉得我的D很聪明所以来写一下(乐

D - Three Days Ago

题意就是 求所有字符出现次数均为偶数的字串数量

太笨了所以想了很久

我把 存在奇数个1 当作第2位是 2 那么 当经过了两次1  2^2 这个2 就变成了0

2 就是第二位 就是4 ...以此类推 

所以我遍历一遍字符串 求出当前的异或 并记录到map里面 

为了让整串为0的可以被算到 mp[0]初始值为1

例如 20230322

读入第1个的时候 mp[4]=1;

读入第2个的时候 mp[5]=1;

读入第6个的时候 mp[0]=2; 此时为2 ans+1;

读入第7个的时候 mp[4]=2;ans+1;

读入第8个的时候 mp[0]=3; 说明前面有2种匹配方法 ans+2

这样就得出答案了

#include<bits/stdc++.h>
#define close     std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
const ll MAXN = 5e5+7;
const ll mod =1e9+7;
const ll inf =0x3f3f3f3f;
const ll INF =0x3f3f3f3f3f3f3f3f;
#define int long long 
int dp[2][1024],p[20];
int pre[1024];
int lowbit(int x){ return x&-x; }
int gcd(int x,int y){int k=0; if(x<y){k=x;x=y;y=k;}while(x%y!=0){k=x%y;x=y;y=k;}return y;}
ll _power(ll a,int b){ll ans=1,res=a;while(b){if(b&1) ans=ans*res%mod;res=res*res%mod;b>>=1;}return ans%mod;}
void solve(){
    string s;cin>>s;
    int pp=1,bz=0;
    for(int i=0;i<=9;i++){
        p[i]=pp;
        pp*=2;
    }
    int n=s.length();
    int ans=0;
    pre[0]++;
    for(int i=0;i<n;i++){
        int m=s[i]-'0';
        bz=bz^p[m];
        if(bz==0||pre[bz]!=0) ans+=pre[bz];
        pre[bz]++;
    }
    cout<<ans;
}
signed main(){
    solve();
}
View Code

虽然大家应该都是这样写的但我还是要发一下

标签:AtCoder,const,Beginner,Contest,int,ll,long,mp,读入
From: https://www.cnblogs.com/xishuiw/p/17300581.html

相关文章

  • 练习记录-AtCoder Beginner Contest 296(A-F)
    vp的感觉整场挺智慧A-Alternately找有没有连续的男女#include<bits/stdc++.h>#defineclosestd::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)usingnamespacestd;typedeflonglongll;constllMAXN=3e5+7;constllmod=1e9+7;constllinf=0x3......
  • AtCoder Beginner Contest 278
    口胡一下,从青色开始E-GridFilling给定一个W×H的矩阵,每个格子有一个数,在1和N之间,给定w<=W,h<=H,对于每个满足1<=i<=W-w+1,1<=j<=H-h+1的格子(i,j),求以它为左上角的w×h矩阵被遮住后整个大矩阵还剩下几种数字。W,H,N,w,h<=300首先我们看见这个熟悉的300就知道是立方算法又注......
  • AtCoder ABC286 C - Chinese Restaurant
    AtCoderABC286C-ChineseRestaurant题目描述有\(N\)个人从\(0\)开始编号,按逆时针顺序间隔均匀地坐在转盘周围。在开始时,第\(p_i\)盘菜在第\(i\)个人的前面。现在,你可以进行以下操作\(0\)次或多次。将转盘逆时针旋转\(\dfrac{1}{N}\)圈。也就是说,旋转前......
  • AtCoder ABC295 D - Three Days Ago
    AtCoderABC295D-ThreeDaysAgo题目描述给出一个数字串,问有多少子段满足,可以以某种方式将这个子段重排,将子段分成两个完全相同的部分。样例输入输出202303224\((1,6)(1,8)(2,7)(7,8)\)都可以满足条件分析如果要满足某一个字段可以被分为两个相同的部分,则不......
  • AtCoder ABC294 F - Sugar Water 2
    AtCoderABC294F-SugarWater2题意有\(2\)排糖和水。第\(1\)排有\(N\)瓶糖和\(N\)瓶水。糖分别有\(A_i\)克,水分别有\(B_i\)克。第\(2\)排有\(M\)瓶糖和\(M\)瓶水,糖分别有\(C_i\)克,水分别有\(D_i\)克。若要从第\(1\)排糖水中找到\(A_i\)克糖和......
  • AtCoder Beginner Contest 226(E,F,G)
    AtCoderBeginnerContest226(E,F,G)E(并查集)E这个题的大意是给我们一个无向图,我们可以把这些无向边变成有向边,让每一个点的入度都是\(1\),问有多少种变化方式要让有\(x\)个点的无向图,形成一棵树的边的数量是\(x-1\),但是我们需要的是每一个点的入度为\(1\),那么我们只还需要一条......
  • AtCoder Regular Contest 158 D - Equation
    题目链接原本看着式子直接晕了,觉得是高深的硬核数论,于是放弃(然后E也没想出来,sad)关键的思路在于,考虑构造由(a,b,c)->(ta,tb,tc)这样的求解方式。在看到这个做法后,会发现它很好地利用了题目齐次的性质;至于如何由齐次式想到这个做法,可能需要足够的天赋或者经验吧(悲)化简后得到\(At......
  • [Leetcode Weekly Contest]339
    链接:LeetCode[Leetcode]2609.最长平衡子字符串给你一个仅由0和1组成的二进制字符串s。如果子字符串中所有的0都在1之前且其中0的数量等于1的数量,则认为s的这个子字符串是平衡子字符串。请注意,空子字符串也视作平衡子字符串。返回s中最长的平衡子字符串......
  • AtCoder Beginner Contest 296
    AtCoderBeginnerContest296比赛连接好久没写题解了~~D-M<=ab题意就是给定N,M,求一个最小的数x同时满足x>=M且x=a*b(a<=N,b<=N);N,M<=1e12开始脑瘫想了二分,仔细一想很明显x不满足单调性,想了下暴力的时间复杂度巨大...纠结了一会,发现因子最大是sqrt(m),只需要枚举一下因......
  • AtCoder Beginner Contest 144
    AtCoderBeginnerContest144https://atcoder.jp/contests/abc144补一下3.23做的。D-WaterBottle分类讨论,三角函数。#include<bits/stdc++.h>#definepiacos(-1)usingnamespacestd;intmain(){inta,b,x;cin>>a>>b>>x;......