首页 > 其他分享 >小红的回文数

小红的回文数

时间:2024-02-29 22:03:03浏览次数:20  
标签:奇数 int 奇偶性 小红 偶数 区间 回文

引言

题目连接:https://ac.nowcoder.com/acm/contest/75174/E

思路

随意选取一段区间,对其长度进行分类讨论:

  1. 若其长度为偶数,则 0 ~ 9 这十个数字在该区间内出现的次数为偶数时,可以将该区间重构成回文。

  2. 若其长度为奇数,则满足 0 ~ 9 这十个数有一个出现次数是奇数,其余数为偶数则可将该区间重构成回文。

暴力做法则是枚举 l,r,时间复杂度为 O(n^2)

然而该题并不需要知道该区间数的个数,只需要知道其奇偶性,则正确答案为与当前区间奇偶性相同的前面的区间数(偶数)和只相差一个的区间(奇数时多出来的数可以放到中间)。

例:
1 1 0
假设当前为最后一位 0,那么此时的 [1,3] 的每个数的奇偶性为:

0 奇 1 偶 2 偶 ...

那么和其奇偶性相同的偶数区间没有

奇数区间为 [0,0] ,整个区间,此时多出的奇数次 0 可以放到中间构成回文串。

代码

#include <bits/stdc++.h>
#define ll long long

std::map<int,int> mp;

int main() {
    std::string str;
    std::cin >> str;
    
    mp[0] = 1;
    
    ll ans = 0;
    int len = str.size();
    for (int i = 0, now = 0 ; i < len ; i ++ ) {
        now ^= 1 << (str[i] - '0');
        
        ans += mp[now];
        
        for (int j = 0 ; j < 10 ; j ++ ) {
            ans += mp[now ^ (1 << j)];
        }
        
        mp[now] ++ ;
    }
    
    std::cout << ans << '\n';
    
    return 0;
}

标签:奇数,int,奇偶性,小红,偶数,区间,回文
From: https://www.cnblogs.com/NachoNeko/p/18045190

相关文章

  • 9.回文数
    完成度:完成但是较为复杂问题:自己写的时候写了一堆思路还要折中算法啥的,但是看了答案发现果然还得是大佬写出来更方便的,直接用另一个变量赋值后面再和x比较。这道题看答案如果是自己写的话想不到while(x>revert){revert=revert*10+x%10;x=x/10;}returnxrevert||xrevert/10;......
  • leedcode 验证回文串
    自己写的:classSolution:defisPalindrome(self,s:str):#将字符串转换为小写,以便进行大小写不敏感的比较s_lower=s.lower()#获取字符串的长度n=len(s_lower)#创建一个空列表,用于存储字母和数字......
  • (26/60)组合总和、组合总和Ⅱ、分割回文串
    组合总和leetcode:39.组合总和回溯法思路在组合的基础上,只不过同一个数字可以重复选取,递归时传入i即可(组合是传入i+1)。复杂度分析时间复杂度:在最坏情况下,回溯算法会遍历所有可能的组合,因此时间复杂度取决于解的个数。假设候选数组的长度为n,目标值为target,最坏情况下解的......
  • 【Python】 回文数的四种解法
    回文数就是指整数倒过来和原整数相等。1234Example1:  Input:121Output:true12345Example2:  Input:-121Output:falseExplanation:Fromlefttoright,itreads-121.Fromrighttoleft,itbecomes121-.Therefore......
  • 小红书 x Hugging Face 邀请你一起晒「创意新春照」
    不藏了,近期全网爆火的AI写真项目InstantID,正是来自小红书社区技术创作发布团队。为了迎接龙年春节的到来,我们的InstantID全新推出「SpringFestival」新春风格!并与著名开源模型社区HuggingFace联手,在小红书APP上,特别策划「你的新春照我包了」有奖互动。只需上传一张照片......
  • 代码随想录 day60 回文子串 最长回文子序列
    回文子串dp[i][j]:[i,j]范围内为回文子串递推式分三种情况①:ij相等显然是回文②:j-i<1且s[i]==s[j]显然是回文③:j-i>1且dp[i+1][j-1]为true也就是当前两端元素相同看元素内部是否是回文如果是显然是ij范围内是回文初始化必须初始化falset......
  • 代码随想录算法训练营第二十六天| 39. 组合总和 40.组合总和II 131.分割回文串
    组合总和题目链接:39.组合总和-力扣(LeetCode)思路:依然一是套用回溯模板,但是我们这里用回溯的是i而不是i+1,因为元素可以重复使用,注意for循环里if(sum(path)<=target)的等号不能少。classSolution{public:vector<int>path;vector<vector<int>>result;intsu......
  • P4555 [国家集训队] 最长双回文串
    题目链接:https://www.luogu.com.cn/problem/P4555题解:要找一个由两个回文组成字符串,一定有一个分割的位置,将两个回文串分开,设分割x,x+1,可能成为最后答案的值一定是左边的最长回文串和右边的最长的回文串长度之和。   回文中心一个<x,一个>x+1且一定包含x和x+1。如果最......
  • 【C++】判断回文字符串。回文指的是顺读和逆读都一样的字符串。例如,“tot”和“otto”
    //判断字符串是否是回文字符串(考虑大小写,空格和标点符号)boolpalindrome1(string&str){stringret;for(auto&c:str){if(isalpha(c)){if(isupper(c)){ret.push_back(tolower(c));}else{ret.push_back(c);}......
  • 回文子列 -- 连续与不连续
    题目:647回文子串https://leetcode.cn/problems/palindromic-substrings/description/讲解:https://programmercarl.com/0647.%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE5最长回文子串https://leetcode.cn/problems/longes......