首页 > 其他分享 >神奇数(狗东的笔试题)

神奇数(狗东的笔试题)

时间:2022-10-26 21:02:05浏览次数:49  
标签:return HashMap int 笔试 vec 神奇 狗东 dp Result


题目描述

东东在一本古籍上看到有一种神奇数,如果能够将一个数的数字分成两组,其中一组数字的和等于另一组数字的和,我们就将这个数称为神奇数。例如242就是一个神奇数,我们能够将这个数的数字分成两组,分别是{2,2}以及{4},而且这两组数的和都是4.东东现在需要统计给定区间中有多少个神奇数,即给定区间[l, r],统计这个区间中有多少个神奇数,请你来帮助他。

输入描述:


输入包括一行,一行中两个整数l和r(1 ≤ l, r ≤ 10^9, 0 ≤ r - l ≤ 10^6),以空格分割


输出描述:


输出一个整数,即区间内的神奇数个数


示例1

输入

复制


1 50


输出

复制


4


#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<unordered_map>
using namespace std;

int l,r;

bool IsMagical(vector<int>& vec)
{
int len = vec.size();
int sum = accumulate(vec.begin(), vec.end(), 0);
if (sum & 1)
return false;

int mid = (sum>>1);
vector<int> dp(mid + 1, 0);
dp[0] = 1;
for (int i = 0; i < len; ++i)
{
for (int j = mid; j > 0; --j)
{
if (j >= vec[i])
dp[j] = max(dp[j], dp[j - vec[i]]);
}
}
if (dp[mid])
return true;
else
return false;
}


vector<int> GetSortNum(int i){
vector<int >Result;
int tmp = 0;
while(i){
tmp = i % 10;
i = i / 10;
Result.push_back(tmp);
}
sort(Result.begin(),Result.end());
return Result;
}

int main(){
cin >> l >> r;
int Result = 0;
//unordered_map<vector<int>,bool> HashMap;
map<vector<int>,bool> HashMap;
if(l > r || r <= 10){
printf("%d\n",Result);
return 0;
}
for(int i = l ;i <= r;i++){
vector<int> Vec = GetSortNum(i);
auto it = HashMap.find(Vec);
if(it == HashMap.end()){
bool flag = IsMagical(Vec);
HashMap[Vec] = flag;
if(flag){
Result ++;
}
}
else{
if(it->second){
Result++;
}
}
}
printf("%d\n",Result);
return 0;
}

 

标签:return,HashMap,int,笔试,vec,神奇,狗东,dp,Result
From: https://blog.51cto.com/u_13121994/5798514

相关文章

  • 新浪微博2020界校招笔试-算法工程师
        给定字符串A,A是由逗号分割的数字串,A可以解析成整数数组B。每次操作可以选择任意B[i],并将其递增1.返回使得B中的每个值都是唯一的最小操作次数。输入描述:输入每......
  • 并查集--翻译机的个数(顺丰2020年笔试)
    某学术会议上,一共有n个人参加,现在已知每个人会的语言(一个人可能不会任何语言)。现在有一种学习机,每一个学习机可以在会议期间使一个人暂时掌握一种自己不会的语言,问要使得任......
  • 最长非递减子序列--顺丰2020校招笔试题
    n的范围是[0,100000]DP版本(O(n^2))时间复杂度(LTE):#include<cstdio>#include<iostream>#include<algorithm>usingnamespacestd;#defineN100intmain(){intA[N],dp[N......
  • 平安软件测试工程师笔试题Java题目【多测师】
       //多测师_王sirpackagedcslesson1.test;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassGetCurrentTime{publicvoidgetCurrentTime(......
  • Java后端笔试部分问题及其答案
    时间:2020/4/28感觉这样写不够全面,也不够细致;应该把每个点讲透,然后再用一篇文章把知识点考点串一起。笔试试题汇总有许多人写过,最好看大佬的汇总,全面且细致。自己写的汇总只......
  • 6. Make一些神奇的时序电路
    目录1.序列检测——不用画真值表!2.数码管~简单的寄存器输入输出3.开关去抖动制造universe的数字系统结构1.序列检测——不用画真值表!2.数码管~简单的寄存器输入输......
  • cv算法(cv算法题笔试题库)
    CV值怎样计算阀门的流量不仅跟阀门的Cv值有关系,还跟压差有关系,Kv值的定义是阀门压差在100Kpa的情况下,通过阀门的流量(m3/h)Cv=1.167Kvex=(0.8+1+1.1+0.7+1.2)/5=0.96cv=s......
  • 【综合笔试题】难度 4.5/5,扫描线的特殊运用(详尽答疑)
    ​题目描述这是LeetCode上的218.天际线问题,难度为困难。Tag:「扫描线问题」、「优先队列(堆)」城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给......
  • 茁壮网络笔试
    1.python的字符串和数字不能做加法,会报typeerror2.python中的get(key,value),用于判断字典中是否有key,如果有返回关键字对应的value,否则返回value,不指定则返回Nonechr(......
  • 一些神奇的细节和技巧
    开坑。set和map常数都很大,很阴人。我们在使用map<pii,int>时可能会超时。如果某一个关键字的分布很小(比如第一个关键字是\(1\simn\),第二个关键字只有几个存在)不......