把一位数、两位数、三位数……这些所在的范围分开判断

可得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 - 罗小黑的“礼物”Ⅰ/Ⅱ/Ⅲ的更多相关文章

  1. Bzoj索引

    1001 : http://ideone.com/4omPYJ1002 : http://ideone.com/BZr9KF1003 : http://ideone.com/48NJNh1004 : ...

  2. UVa 1640 (计数) The Counting Problem

    题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以 ...

  3. Hsql中In没有1000的限制

    SELECT * FROM user , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...

  4. jqu

    1 /*2 * 说明:3 * 本源代码的中文注释乃Auscarlin呕心沥血所作.旨在促进jQuery的传播以及向广大jQuery爱好者提供一个进阶4 *的途径,以让各位更加深入地了解jQuery,学 ...

  5. 【8.0.0_r4】AMS分析(十六)(ActivityManagerService.java上)

    代码位于frameworks/base/services/core/java/com/android/server/am/,一共有七十个文件. Java源码位于package com.android. ...

  6. No2_2.接口继承多态_Java学习笔记_继承

    ***类的继承***1.继承的实现extends2.[修饰符] class 子类名 extends 父类名{}3.修饰符一般为:public abstract final4.重写是指父子类之间的关系, ...

  7. 7.12归来赛_B

    Prime Judge 时间限制 1000 ms 内存限制 65536 KB 题目描写叙述 众所周知.假设一个正整数仅仅能被1和自身整除,那么该数被称为素数.题目的任务非常easy.就是判定一个数是否 ...

  8. 使用 Spring Boot 构建 RESTful API

    1. 使用 Idea 创建 Spring Initializer 项目 在创建项目的对话框中添加 Web 和 Lombok,或者建立项目后在 pom.xml 中添加依赖: <dependency ...

  9. Camtasia处理音频制作BGM

    我们在剪辑自己录制的视频时经常会需要同时对音频进行处理,camtasia是一个可以对视频的音频或者单独的音频文件进行处理的软件,那我们就来看看到底如何使用camtasia 2019(Win)来处理音频 ...

随机推荐

  1. POJ2392:Space Elevator

    Space Elevator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9244   Accepted: 4388 De ...

  2. VC 插入excel

    CString ePath,iPath; m_ePath.GetWindowText(ePath); m_iPath.GetWindowText(iPath); _Application app; W ...

  3. Asp.net MVC中表单验证属性的使用

    用于检查是否有输入值 :RequiredFieldValidator(必须字段验证)按设定比较两个输入 :CompareValidator(比较验证) 输入是否在指定范围 :RangeValidato ...

  4. linux下安装redis,按照redis官网安装不成功需要提前安装c++环境(安装成功并可以测试)

    这个安装是一种便捷的安装,没有几句,但是完全按照官网上的来没有安装成功,有前提条件的 打开linux root登录 然后在usr下面建文件夹redis,进入 在该文件加下,直接按照官网的指导进行安装即 ...

  5. 洛谷 P2549 计算器写作文

    题目传送门 解题思路: 背包,f[i]表示计算器位数为i时,可获得的最大分值. 本题与01背包不同的地方在于,物品的摆放顺序对答案是有影响的,例如两个字符串a,b,那么就会出现a+b和b+a两种情况( ...

  6. web.xml中的classpath是啥

    在web.xml中一个很面熟的字:classpath,它到底是个啥? <servlet> <servlet-name>dispatcherServlet</servlet ...

  7. Vulkan 之 Layers

    Layers 暴露给api层,不像传统图形API集成在驱动里面,开发者根据自己的需要进行开启,最终目的还是为了提高性能. The Loader he loader is the central arb ...

  8. java中JDBC当中请给出一个DataSource的HelloWorld例子

    在前面 的jdbc的Helloworld程序当中,我们用DriverManager来获取数据库连接.事实上通过这种方法获取数据库连接,是比较耗费计算机资 源的.当然了,这也是没有办法的事儿.就像我们买 ...

  9. JQuery去实现校验用户名

    JQuery 是什么? javascript 的代码框架. 有什么用? 简化代码,提高效率. 核心 write less do more , 写得更少,做的更多. load //找到这个元素, 去执行 ...

  10. [转载]Jquery Chosen 插件动态生成option或重新绑定

    $(".chosen—select").find("option[value='1']").attr("selected", "s ...