Codeforces Round #587 (Div. 3), problem: (E1) Numerical Sequence (easy version)【有优化版的暴力解法+读入写出挂运用】
发布日期:2021-06-29 14:25:44 浏览次数:3 分类:技术文章

本文共 1286 字,大约阅读时间需要 4 分钟。


题目大意

分组 第一组是1 第二组是12 第三组123 …第10组12345678910 然后给你几个查询值 查询当前下标所对应的值


题解

刚开始我以为数据还好,easy版本的话,我直接用string存下所有的值 然后到时候直接输出就是 不过这样会炸掉

后面打完比赛后参考了dalao的做法后,发现其实没有必要存下全部的值,我们可以一步一步存,例如:
1
12
123
1234
12345
123456
1234567
12345678

然后我们存下当前记录的字符长度,如果已有的长度加上当前的长度大于等于给定的下标 那么我们就把过去存的长度减去 剩余值就是要求的数值

例如给定20 那么当我们走到上面三角形的第6层时,显然长度大于20了,我们减去已有的长度1+2+3+4+5=15 则最后的位置是20-15-1=4 即为第6层第四个数 为5(下标从0开始)

在这里插入图片描述

#include
#define endl '\n'using namespace std;typedef long long ll; inline char gc(){
static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}#define gc getcharinline ll read(){
ll x = 0; char ch = gc(); bool positive = 1; for (; !isdigit(ch); ch = gc()) if (ch == '-') positive = 0; for (; isdigit(ch); ch = gc()) x = x * 10 + ch - '0'; return positive ? x : -x;}inline void write(ll a){
if(a<0){
a=-a; putchar('-'); } if(a>=10)write(a/10); putchar('0'+a%10);}inline void writeln(ll a){
write(a); puts("");} ll t;int main(){
t=read(); while(t--){
ll k; k=read(); string s=""; ll len=0; for(int i=1;i<=100000;i++){
s+=to_string(i); //cout<
<
=k){
cout<
<
学如逆水行舟,不进则退

转载地址:https://chocolate.blog.csdn.net/article/details/101225015 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:解决VMware装上Mac后icloud无法激活 【安装QQ发现不能注册Apple ID】
下一篇:Codeforces Round #587 (Div. 3), problem: (D) Swords 【数学+gcd+奇妙解题?】

发表评论

最新留言

很好
[***.229.124.182]2024年04月19日 21时34分48秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章