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)来处理音频 ...
随机推荐
- Mac 设置git的template
1.在home目录下修改.gitconfig(没有新建) 2. 在home下新建 .setCommitMsg 文件 3.然后将一下内容复制到文件中 # <类型>: (类型的值见下面描述) ...
- GNS3 ip route 命令解析
ip route 120.94.0.0 255.254.0.0 172.16.252.1ip route 192.168.0.0 255.255.0.0 10.10.10.119ip route 21 ...
- Oracle-SQL 小题
1.查询姓名中不包含C和c的员工信息 ; ①字符函数 instr(input,char,m,n) 的用法:返回在字符值中查找字符串char的数字位置.参数m作为查找的开始,参数n代表第n次发现.m和n ...
- Python 35个内置函数,你都ok吗?
Python一共有60多个内置函数,今天先梳理其中35 个 1 abs() 绝对值或复数的模 . In [1]: abs(-6)Out[1]: 6 2 all() 接受一个迭代器,如果迭代器的所有元素 ...
- Python MySQL 插入表
章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...
- Atom :奥特曼的使用
最近在使用atom的编译器,很不爽,什么快捷键,还有识别vue的页面,还有注释这种快捷下载下来的都没有 必须到setting里面的install里下载,我能大声的说我很不爽吗............ ...
- 关于 with 语句
class C(object): def __enter__(self): print('jinru') return self def __exit__(self, exc_type, exc_va ...
- QThread创建多线程程序
最近在阅读Qt 5.9 C++开发指南,为了加深对书本上内容的理解,参照书上的讲解尝试写了一些demo,用于以后工作中查阅,如果涉及侵权请告知,实例程序samp13_1 mythread.h #ifn ...
- python -- 犯过的错之变量作用域
1.写代码时发现取得变量值,会被覆盖,改为图二的写法后case_id则不会覆盖. 原因:可以理解为变量是内存中一个对象的“引用”.在函数参数传值时,变量也是内存对象的引用. 当对象为可更改对象时,是引 ...
- HDU 5477: A Sweet Journey
A Sweet Journey Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...