ZJNU 2340/2341/2343 - 罗小黑的“礼物”Ⅰ/Ⅱ/Ⅲ
把一位数、两位数、三位数……这些所在的范围分开判断
可得1~9这些数范围在[1,9]内
10~99内共有90个数,每个数占两位,所以共有180位在,范围在[10,189]内
同理,100~999内共有900个数,每个数占三位,所以共有2700位在,范围在[190,2889]内
……
最后对于范围,可以得出一个规律
9 189 2889 38889 488889 ......
知道了范围,就可以求指定的答案了
比如输入一个数n范围在[190,2889]内
就能知道这是个三位数
n-190后,0/1/2对应数字100的三位,3/4/5对应数字101的三位,以此类推
所以(n-190)/3+100可以找出对应的数字
而(n-190)%3可以找出是对应的数字的第几位
(代码中写成(n-189+2)/3+99,意思相同,2代表位数减1)
因此对于Ⅰ题,可以直接暴力敲代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int q,n,d,dd;
cin>>q;
while(q--){
cin>>n;
if(n<=)
cout<<n<<endl;
else if(n>&&n<=){
d=(n-+)/+;
if(n&)
cout<<d%<<endl;
else
cout<<d/<<endl;
}
else if(n>&&n<=){
d=(n-+)/+;
dd=(n-)%;
if(dd==)
cout<<d%<<endl;
else if(dd==)
cout<<d/<<endl;
else
cout<<d/%<<endl;
}
else{
d=(n-+)/+;
dd=(n-)%;
if(dd==)
cout<<d%<<endl;
else if(dd==)
cout<<d/<<endl;
else if(dd==)
cout<<d/%<<endl;
else
cout<<d/%<<endl;
}
} return ;
}
对于Ⅱ,这种方法显然也可行
#include<bits/stdc++.h>
using namespace std;
int main(){
int q,n,d,dd;
cin>>q;
while(q--){
cin>>n;
if(n<=)
cout<<n<<endl;
else if(n>&&n<=){
d=(n-+)/+;
if(n&)
cout<<d%<<endl;
else
cout<<d/<<endl;
}
else if(n>&&n<=){
d=(n-+)/+;
dd=(n-)%;
if(dd==)
cout<<d%<<endl;
else if(dd==)
cout<<d/<<endl;
else
cout<<d/%<<endl;
}
else if(n>&&n<=){
d=(n-+)/+;
dd=(n-)%;
if(dd==)
cout<<d%<<endl;
else if(dd==)
cout<<d/<<endl;
else if(dd==)
cout<<d/%<<endl;
else
cout<<d/%<<endl;
}
else{
d=(n-+)/+;
dd=(n-)%;
if(dd==)
cout<<d%<<endl;
else if(dd==)
cout<<d/<<endl;
else if(dd==)
cout<<d/%<<endl;
else if(dd==)
cout<<d/%<<endl;
else
cout<<d/%<<endl;
}
} return ;
}
但是对于Ⅲ,1e18的范围就只能循环找规律了
数据打个表用循环做!
以下代码三道题目均能使用
#include<stdio.h>
int main(){
long long q,n,d,dd,i,j,qq[]={9LL,189LL,2889LL,38889LL,488889LL,5888889LL,68888889LL,788888889LL,8888888889LL,98888888889LL,1088888888889LL,11888888888889LL,128888888888889LL,1388888888888889LL,14888888888888889LL,158888888888888889LL},qd[]={9LL,99LL,999LL,9999LL,99999LL,999999LL,9999999LL,99999999LL,999999999LL,9999999999LL,99999999999LL,999999999999LL,9999999999999LL,99999999999999LL,999999999999999LL,9999999999999999LL},ed[]={1LL,10LL,100LL,1000LL,10000LL,100000LL,1000000LL,10000000LL,100000000LL,1000000000LL,10000000000LL,100000000000LL,1000000000000LL,10000000000000LL,100000000000000LL,1000000000000000LL,10000000000000000LL,100000000000000000LL};
scanf("%lld",&q);
while(q--){
scanf("%lld",&n);
if(n<=)
printf("%lld\n",n);
else{
for(i=;i<=;i++){
if(i<&&n>qq[i]&&n<=qq[i+]||i==&&n>qq[]){
d=(n-qq[i]+i+)/(i+)+qd[i];
dd=(n-qq[i])%(i+);
if(dd==)
printf("%lld\n",d%);
for(j=;j<i+;j++){
if(dd==j){
printf("%lld\n",d/ed[i+-j]%);
break;
}
}
break;
}
}
}
} return ;
}
完美!(
ZJNU 2340/2341/2343 - 罗小黑的“礼物”Ⅰ/Ⅱ/Ⅲ的更多相关文章
- Bzoj索引
1001 : http://ideone.com/4omPYJ1002 : http://ideone.com/BZr9KF1003 : http://ideone.com/48NJNh1004 : ...
- UVa 1640 (计数) The Counting Problem
题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以 ...
- Hsql中In没有1000的限制
SELECT * FROM user , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...
- jqu
1 /*2 * 说明:3 * 本源代码的中文注释乃Auscarlin呕心沥血所作.旨在促进jQuery的传播以及向广大jQuery爱好者提供一个进阶4 *的途径,以让各位更加深入地了解jQuery,学 ...
- 【8.0.0_r4】AMS分析(十六)(ActivityManagerService.java上)
代码位于frameworks/base/services/core/java/com/android/server/am/,一共有七十个文件. Java源码位于package com.android. ...
- No2_2.接口继承多态_Java学习笔记_继承
***类的继承***1.继承的实现extends2.[修饰符] class 子类名 extends 父类名{}3.修饰符一般为:public abstract final4.重写是指父子类之间的关系, ...
- 7.12归来赛_B
Prime Judge 时间限制 1000 ms 内存限制 65536 KB 题目描写叙述 众所周知.假设一个正整数仅仅能被1和自身整除,那么该数被称为素数.题目的任务非常easy.就是判定一个数是否 ...
- 使用 Spring Boot 构建 RESTful API
1. 使用 Idea 创建 Spring Initializer 项目 在创建项目的对话框中添加 Web 和 Lombok,或者建立项目后在 pom.xml 中添加依赖: <dependency ...
- Camtasia处理音频制作BGM
我们在剪辑自己录制的视频时经常会需要同时对音频进行处理,camtasia是一个可以对视频的音频或者单独的音频文件进行处理的软件,那我们就来看看到底如何使用camtasia 2019(Win)来处理音频 ...
随机推荐
- flask 常用数据模型模板
1.一对多关系模型 示例代码 class Role(db.Model): """角色表""" __tablename__ = 'roles' ...
- PHP开发-模板的使用
通过今天晚上半个多小时的赵老师对模板的介绍,大致对模板的使用.结构以及开发模板的思想有了个大致的了解. 为什么要开发模板:模板就是将PHP发过过程中使用到.需要操作的事物封装成对象.以便在使用到的时候 ...
- TensorFlow2 Part1:基础
TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络 ...
- Spring Cloud 支付宝支付的流程
沙箱环境又称沙盘,为了开发与调试所提供的环境,它与生产环境互相隔离,但具有生产环境几乎完全相同的功能蚂蚁金服开放平台——开发者中心1.https://openhome.alipay.com2.提供的调 ...
- python中的__code__
简单总结几个常用的__code__的用法: (1)func.__code__.co_argcount:返回函数的参数个数,这里的参数个数不包含*args与**kwargs,具体来讲就是*args前的参 ...
- Apache部署Django+Vue
首先部署Vue,后端项目django开5000端口,所以vue里的路由是ip:5000,然后打包npm run build 生成dist文件 把dist文件里的index.html和static放在/ ...
- Python MySQL 插入表
章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...
- ACM-数细胞
题目描述:数细胞 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.编程需要用到的队列及其相关函数已经实现,你只需要完成 ...
- Perl 笔试题2 -- 统计单词频次
Nvidia 2019 perl 笔试题 统计一个文件内单词的频次并排序 文本如下: "ALL happy families resemble one another; every unha ...
- 【剑指Offer】面试题07. 重建二叉树
题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 ...