【集训Day1 测试】奇怪数
奇怪数(odometer)
【题目描述】
一个正整数Z是奇怪数,当且仅当满足的条件是:Z的所有数字中,只有一个数字不同于其他数字。例如:33323、110 都是奇怪数,而 9779、5555 都不是奇怪数。给出两个正整数 X 和 Y,满足 100 <= X <= Y <= 10^16,请问区间[X,Y]内有多少个奇怪数?
【输入格式】odometer.in
一行,两个整数,X 和 Y。
【输出格式】odometer.out
一个整数。【输入样例】
110 133
【输出样例】
13
【样例解释】
110,112,113,114,115,116,117,118,119,121,122,131,133 都是奇怪数。
【解题思路】
基本思路是枚举,但是如果按照正常方法进行枚举,那么依照本题的数据范围,必然会超过时间限制。显然,需要另外寻找一条路进行枚举。
根据题面可知,奇怪数是由a,b两个数字组成,但是其中b只能出现一次。所以,我们可以尝试枚举a和b,构成奇怪数。在构成奇怪数之后,判断是否在x和y的范围内即可。
【解题反思】
- 可以尝试从问题的另一面入手解决问题。
- 注意奇怪数的定义,由两个数字组成,但是其中有一个数字只能出现一次,9559,633663这些就不是奇怪数。
【参考程序】
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long len,x,y;
long long count(long long num)
{
string st="",s="";
int ansc=0;
while (num!=0)
{
st=char(num%10+48)+st;
num/=10;
}//将数字转化为字符串 以便求出长度
len=st.size();
for (int i=3;i<=len;i++)//枚举奇怪数的长度
for (char j='0';j<='9';j++)//枚举奇怪数中重复出现的数字
{
s="";
for (int k=0;k<i;k++) s+=j;//填充奇怪数
for (char l='0';l<='9';l++)//枚举奇怪数中只出现一次的数字
if (j!=l)//两数不相同才有意义
for (int m=0;m<i;m++)//枚举奇怪数中只出现一次的数字的位置
{
s[m]=l;//填充
if (s[0]!='0'&& (s<=st||i<len)) ansc++;//判断是否在范围内
s[m]=j;
}
}
return ansc;
}
int main()
{
freopen("odometer.in","r",stdin);
freopen("odometer.out","w",stdout);
cin>>x>>y;
cout<<count(y)-count(x-1);//利用子程序求出100~y之间的奇怪数,再求出 100~(x-1)的奇怪数
//两者相减即为x~y的奇怪数
return 0;
}
【集训Day1 测试】奇怪数的更多相关文章
- 中山纪中集训Day1测试(摸鱼)
AT3 粉刷匠 Description 赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= = 现在,神庙里有N根排列成一直线的石柱,从1到N标号,长老要求用油漆将这些石柱重新粉刷一遍.赫克托有K桶颜色各不 ...
- 【集训Day1 测试】选择课题
选择课题(bestproject) [问题描述] Robin 要在下个月交给老师 n 篇论文,论文的内容可以从 m 个课题中选择.由于课题数有限,Robin 不得不重复选择一些课题.完成不同课题的论文 ...
- 【集训Day1 测试】装饰
装饰(decorate) [题目描述] 一个图有 N 个结点,编号 1 至 N,有 M 条无向边,第 i 条边连接的两个结点是 Ai 和Bi,其中 Ai 和 Bi 是不同的结点.可能有多条边连接的是同 ...
- 【集训Day1 测试】【USACO】照相
照相(fairphoto) [题目描述] 有N 头奶牛站在一条数轴上,第 i 头奶牛的位置是 Pi,奶牛不会重叠站在同一个位置, 第i 头奶牛的颜色是 Ci,其中 Ci 要么是字符'G'要么是字符'H ...
- 国庆集训 Day1 T2 生成图 DP
国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...
- 2019暑期金华集训 Day1 组合计数
自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...
- 2019暑期金华集训 Day1 数据结构
自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...
- LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)
LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...
- 暑假集训Day1 整数划分
题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...
随机推荐
- 用Java JMC控制台分析线程阻塞原因
问题 今天在玩dianping-CAT框架时,发现请求某个页面的时候,发生了阻塞.浏览器得不到响应. 环境 本地Tomcat 8 , Windows 系统. 解决 启动jmc 控制台,找到BLOCKE ...
- unity 开启外部摄像头
在unity中建立一个image作为摄像头显示画面,然后通过命令render到image上即可. public WebCamTexture webTex; public string deviceNa ...
- SpringBoot与热部署整合(五)
一 Idea pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- java中Arrays.sort()对二位数组进行排序
int [][]a = new int [5][2]; //定义一个二维数组,其中所包含的一维数组具有两个元素 对于一个已定义的二位数组a经行如下规则排序,首先按照每一个对应的一维数组第一个元素进行升 ...
- 【JAVA】可视化计算器
import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.Actio ...
- 优化 Git Commit Message
目前很多项目都是通过 Git 进行管理的,Git 每次提交代码的过程中 提交说明 commit message 是必须的.但仅仅必须是不够的,好的提交说明可以帮助我们提高项目的整体质量. 作用与优点 ...
- Windows 10 与 kali 双系统安装
一.教程中用到的工具如下: 1.kali 2019镜像, 2.U盘 现在最低也有8G吧 3.软碟通 ,U盘刻录工具 4.win 10系统要留出一个空的硬盘,哪个盘的空间比较大可以压缩出大概100G的空 ...
- 学习笔记60_python面向对象
**** //可以给函数参数设置默认值 def stu_register(name,age,course,country="CN"): 若你的函数在定义时不确定用户想传入多少个参数 ...
- 自闭版节奏大C
1,2,3,4打碟 #include <bits/stdc++.h> #include <conio.h> #include <windows.h> using n ...
- NOIP模拟 32
我在31反思中膜拜过了B哥 没想到这次又... 我给老姚家丢脸了...STO 首先T1暴力就写挂了... 贪图从$n^3$*$2^n$优化成$n^2$*$2^n$然后打错了 哗哗的扔分 而且正解都想不 ...