POJ1019 NumberSequence 【数学公式转化题】

这题也是一看感觉自己能做,就拿出笔和纸开始写写画画了,写的也蛮爽(下午1点到晚上8点,,,),其实,,,也就俩方程的事情。。。但是中间出了个逗比错误,10+11+12+...+99算成了(1+90)*90/2(找出这个错误真心不容易,现学了点linuxshell知识,也正好写了写相关的脚本,比如对拍脚本,运行脚本,挺好的)

这个错误也是奇葩,,前7000个竟然都没错,,真是 奇葩~

感觉数学题还是要做慢点,尤其是写完一个重要的东西,检验一下,,,错了就毙掉了,很花时间,在代码量还算少的时候就调试好

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
long long Fsave[99999];
long long fsave[99999];
char aint[59999];
inline long long  g(long long  n)//f函数的一部分,f函数是1234567891011...到每个数有几个数位f=g(n)+xn
{
    long long  tens=1;
    for(long long  i=0;i<n-1;i++)
    {
        tens*=10;
    }
    return (1-tens)/9-tens+n;
}
inline long long  getn(long long  x)//获得一个10进制数是几位数
{
    long long  co=0;
    while(x)
    {
        x/=10;
        co++;
    }
    return co;
}
inline long long  F(long long  x,long long  n)//1121231234最终序列的,到每个数而言有几个数位
{
    long long  sum=0;
    long long  tenPow=1;
    for(long long  i=1;i<=n-1;i++)
    {
        sum+=9*tenPow*g(i)+(tenPow+tenPow*10-1)*9*tenPow/2*i;
        tenPow*=10;
    }
    //cout<<"sum:"<<sum<<endl;
    n>=2?tenPow:tenPow=1;
    sum+=(x-tenPow+1)*g(n)+n*(tenPow+x)*(x-tenPow+1)/2;
    //cout<<tenPow<<endl;
    //cout<<n*(tenPow+x)*(x-tenPow+1)/2<<endl;
    return sum;
}
inline int binsearch(long long x,long long* A)从A中找出x的位置,夹在中间则取左边
{
    int L=0,R=104000;
    int mid=(L+R)>>1;
    while(L<R)
    {
        if(A[mid]>x)
            R=mid;
        if(A[mid]<x)
            L=mid+1;
        if(A[mid]==x)
            return mid;
        mid=(L+R)>>1;
    }
    return mid-1;
}
int main()
{
    //freopen("/home/test/in.txt","r",stdin);
    //freopen("/home/test/list.txt","w",stdout);
    for(long long  x=1;x<=52000;x++)//俩函数打表,用于binarysearch二分搜索
    {
        long long  n=getn(x);
        Fsave[x]=F(x,n);
    }
    for(long long  x=1;x<=52000;x++)
    {
        long long  n=getn(x);
        fsave[x]=g(n)+n*x;
    }
    long long t;scanf("%lld",&t);
    while(t--)
    {
        long long x;scanf("%lld",&x);
		    long long index_F=binsearch(x,Fsave);
		    x=x-Fsave[index_F];//x对应F序列中123...index_F的第几位
		    if(x==0)//如果恰好是结尾
		    {
		        printf("%lld\n",index_F%10);
		        continue;
		    }
		    long long index_f=binsearch(x,fsave);//x对应f中哪个数,f是123456789101112...
		    x=x-fsave[index_f];//x为该数字的第几位,比如122354第四位就是3
		    if(x==0)//刚好结尾
		    {
		        printf("%lld\n",index_f%10);
		        continue;
		    }
		    index_f++;
		    sprintf(aint,"%lld",index_f);
		    printf("%c\n",aint[x-1]);

    }
	return 0;
}

POJ1019 NumberSequence 【数学公式转化题】,布布扣,bubuko.com

时间: 2025-01-07 09:12:04

POJ1019 NumberSequence 【数学公式转化题】的相关文章

Python基础数据类型题

Python基础数据类型 题考试时间:三个小时 满分100分(80分以上包含80分及格)1,简述变量命名规范(3分) 1.必须是字母,数字,下划线的任意组合. 2.不能是数字开头 3.不能是python中的关键字 4.变量不能是中文 5.变量不能过长 6, 变量要具有可描述性 2,字节和位的关系.(2分)8位等于1个字节3,'A太白'使用utf-8编码时,占的位数和字节数,是多少?使用gbk编码时,占的位数和字节数,是多少.(2分)'A太白'使用utf-8编码时,占56位和7个字节,使用gbk编

python基础及数据类型习题

# 一,基础题.# 1,简述变量命名规范(3分)'''变量名不能是python中的关键字变量名可以是字母 数字下划线的组合变量名不能以数字开头'''# 2,字节和位的关系.(2分)# 1 bytes字节=8 bit位# 3,’二哥’使用utf-8编码时,占的位数和字节数,是多少?使用gbk编码时,占的位数和字节数,是多少.(2分)# s='二哥'# res=s.encode('utf-8') #6个字节 * 8 bit位 = 48 站位数# res1=s.encode('gbk') #4个字节

MCM写作

MCM 写作 引言的写作 对赛题的解读. 对现有研究成果的松树与评论 对解题思路和主要方法进行简介 引言第一句话是最重要的,应该激发读者阅读兴趣,应该浅显易懂,不用或者少用数学公式 赛题选定以后要首先用自己的语言重述赛题,明确解题目标,澄清原题叙述中的模糊感念 一题多解,明确表示出是如何解决赛题的 蕴涵着某些机动.可发挥的补充假 设条件,或参赛者可以根据自己收集或模拟产生数据 论文主体 假设条件与解释 打开脑洞,找出合理的假设 必须要给这些假设以合理的解释 模型设计 建立数学模型是解决问题的手段

Python基础数据类型考试题

# Python基础数据类型考试题 # 考试时间:两个半小时 满分100分(80分以上包含80分及格) # 一,基础题. # 1, 简述变量命名规范(3分) # 1.变量由字母.数字.下划线任意组成 # 2.不能以数字开头 # 3.不能使用python关键字 # 4.变量要具有可描述性 # 5.变量不能是中文 # 5.官网推荐骆峰体和下划线,这里推荐下划线 # 2,字节和位的关系.(2分) # 1字节 = 8位 # 3,'太白'使用utf-8编码时,占的位数和字节数,是多少?使用gbk编码时,占

第一次考试试题

# Python基础数据类型考试题# 考试时间:两个半小时 满分100分(80分以上包含80分及格)# 一,基础题.# 1,简述变量命名规范(3分)# 答:变量名是由数字.字母.下划线任意组合,变量名要具有描述性,不能是Python关键字,不能是数字开头,不能是中文.# 2,字节和位的关系.(2分)# 答:8个字节等于一位# 3,'太白'使用utf-8编码时,占的位数和字节数,是多少?使用gbk编码时,占的位数# 和字节数,是多少.(2分)# 答:utf-8 6字节 48位# gbk 4字节 3

第一部分基础知识小结,基础数据类型到循环

# Python基础数据类型考试题 # 考试时间:两个半小时 满分100分(80分以上包含80分及格) # 一,基础题. # 1, 简述变量命名规范(3分) # 1.变量由字母.数字.下划线任意组成 # 2.不能以数字开头 # 3.不能使用python关键字 # 4.变量要具有可描述性 # 5.变量不能是中文 # 5.官网推荐骆峰体和下划线,这里推荐下划线 # 2,字节和位的关系.(2分) # 1字节 = 8位 # 3,'太白'使用utf-8编码时,占的位数和字节数,是多少?使用gbk编码时,占

python基础篇考题

1. 判断下面的结果 # 1. 判断下面的结果 # 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 print(1 > 1 or 3 < 4 or ((4 > 5 and 2 > 1) and 9 > 8) or 7 < 6) # True # 1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8 and 4 &g

Python考试_第一次

python基础数据类型考试题 考试时间:两个半小时 满分100分(80分以上包含80分及格) 一,基础题. 1. 简述变量命名规范(3分) 答:(1) 变量为数字,字母以及下划线的任意组合,且不能以数字开头 (2) 变量名不宜过长,要具有可描述性 (3) 变量名不能为中文和汉字拼音 (4) 默认全大写的为常量 (5) 不能为Python的关键字 2. 字节和位的关系.(2分) 答:1个字节 == 8位 3. ’太白’使用utf-8编码时,占的位数和字节数,是多少?使用gbk编码时,占的位数和字

[BJWC2018]Border 的四种求法

description luogu 给一个小写字母字符串\(S\),\(q\)次询问每次给出\(l,r\),求\(s[l..r]\)的\(Border\). solution 我们考虑转化题面:给定\(l,r\),求满足\(lcs(i,r)\ge i-l+1\)的最大的\(i\). 对于\(lcs(i,r)\),考虑对\(S\)构建\(SAM\),那么我们知道\(lcs\)的可能取值就是从后缀\(r\)所代表的节点沿着\(fail\)树到根节点的路径上节点的\(len\)的取值. 那么我们得到了