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)来处理音频 ...
随机推荐
- 载域和运行域的理解(ARM程序是怎么运行的)
对ARM加载域和运行域的理解 一般而言,一个程序包括只读的代码段和可读写的数据段.在ARM的集成开发环境中,只读的代码段和常量被称作RO段(ReadOnly):可读写的全局变量和静态变量被称作RW段( ...
- Card Stacking 队列模拟
题目链接:https://ac.nowcoder.com/acm/contest/993/ABessie is playing a card game with her N-1 (2 <= N ...
- vue + canvas 图片加水印
思路:将两张图片绘制为一张 目标:输入的文字,绘制到图片上,简单实现图片水印 效果:输入的文字1: ‘你猜猜’ + 图片2 = 图片3(不要看清除水印的按钮,本人垃圾 没实现) 选择图片 html & ...
- idea 将java 项目 打包成jar包
记录一下,防止忘记.ps : 请忽略这个是web项目 1.idea 打包jar包 (1)首先打开Project Structure,选中Artifacts (2)点击绿色加号,选中jar ,然后选中f ...
- CentOS 6.8 32位 安装mysql8
1.清理掉之前安装过的mysql rpm -qa | grep mysql mysql-libs-5.1.52-1.el6_0.1.x86_64 yum remove mysql-libs-5.1.5 ...
- C#验证码 使用GDI绘制验证码
首先展示一下效果图如下: C#中的GDI特别方便,很多方法我们只要简单的调用就可以实现很复杂的功能.具体实现过程如下: 首先创建一个windows窗体应用(测试使用,实际开发winform程序时在需要 ...
- 068-PHP定义并输出数组
<?php $arr=array(98,'hello',67,'A',85,NULL); //定义一个数组 echo "输出第一个元素:{$arr[0]}"; //输出数组的 ...
- javaweb历史上最简单的使用Ajax判断用户名是否被注册(不跳转页面奥!)
关于前端: 使用jquery-3.3.1.js记得要导入奥---最后我会附加我的源码的 哎我也不多说了新手加菜鸟jquery真的不太懂!看代码吧!个别地方我会写上我对本程序的理解. 关于后台也就是se ...
- Origin中使用CopyPage复制图片到Word后比例失调解决办法
Origin画图的优势很多,其图形美观易于操作.对我而言,Origin最大的优点就是与Word兼容,在Origin操作界面空白处直接使用右键CopyPage命令,然后在Word中使用粘贴命令即可插入图 ...
- 启用sql日志
SHOW VARIABLES LIKE "general_log%"; -- 查询是否启用日志 SET GLOBAL general_log = 'ON'; -- 设置启用 SE ...