首页 > 其他分享 >UVA - 10706 Number Sequence 子序列

UVA - 10706 Number Sequence 子序列

时间:2023-04-07 11:02:45浏览次数:31  
标签:count 10 digit Sequence int 10706 ++ num UVA


#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;

const int maxn = 32761;
long long S[maxn];//存放的是S1,S2,到SK的和,S[5]表示了S1到S4的和,当数字变化到K的时候,一共有多少个字数了
int border[9] = {0,1,10,100,1000,10000,100000,1000000,10000000};
int num[9] = {0,9,90,900,9000,90000,900000,9000000,90000000};//num[1]存放1-9的位数,num[2]存放1-99的位数,以此类推,刚开始初始话成这样,是为了后面的计算

int getdigit(int n) {
	int count = 0;
	while(n > 0) {
		count++;	
		n = n / 10;
	}
	return count;
}

void init() {
	for(int i = 2; i < 9; i++)//位数的变化,num[2]存放的是1-99的位数,因为十位数要占两位,所以要用90个十位数*2,再加上前面的9个个位数,就是1-99的位数了,以此类推,num里面的下标表示的位数
		num[i] = num[i-1] + num[i] * i;
	S[0] = 0;
	int digit;
	for(int i = 1; i < maxn; i++) {
		digit = getdigit(i);
		S[i] = (i - border[digit] + 1 )	* digit + num[digit-1];
		S[i] =  S[i] + S[i-1];
	}
}

int main() {
	int n;
	int N;
	scanf("%d",&n);
	init();
	while(n--) {
		scanf("%d",&N);
		long long *p = lower_bound(S,S+maxn,N);
		if(*p == N) 
			printf("%d\n",(p-S) % 10);
		else {
			int len = N - *(p-1);
			bool flag = false;
			int i;
			for(i = 0; i < 9; i++) {
				if(num[i] == len) {
					flag = true;
					break;	
				}
				else if(num[i] > len)
					break;	
			}

			if(flag){
				printf("9\n");
				continue;
			}
			int last = len - num[i-1];
			int k;
			int count = i;
			for(k = border[i]; count < last; count += i,k++);;

				int time = count - last;
			while(time > 0) {
				k = k / 10;
				time--;
			}
			printf("%d\n",k % 10);
		}
	}
	return 0;
}



标签:count,10,digit,Sequence,int,10706,++,num,UVA
From: https://blog.51cto.com/u_10970600/6175577

相关文章

  • UVA - 129 Krypton Factor 回溯+剪枝
    题目大意:给出N种字母,要求用这N种字母组成一个困难的串,困难的串指在串中没有相连的两个子串相同,要求输出第M个困难的串解题思路:像八皇后一样,前面判断的就不需要再去判断了,直接往后判断即可#include<cstdio>#include<cstring>intn,L;intans[100];boolflag;intcnt;boolju......
  • Cyborg Genes UVA - 10723
    求一个最短序列,使得输入的两个串的均为他的子序列,同时输出方案数。  n+m-LCS方案数转移时求#include<iostream>#include<cstring>usingnamespacestd;#defineintlonglongintn,m;chara[102],b[102];intf[102][102],cnt[102][102];signedma......
  • 旅行 Tour uva1347
    直角坐标系中,有nn个点。要求先从左往右走,再从右往左走,不重复的经过每一个点。求出最短路径(距离为两点间直线距离)。 f[i][j]表示点1~max(i,j)已走过,的路径长度 #include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<iomanip>......
  • 例题3-2 WERTYU(WERTYU, UVa10082)
    题目把手放在键盘上时,稍不注意就会往右错一位。这样,输入Q会变成输入W,输入J会变成输入K等。键盘如图3-2所示。输入一个错位后敲出的字符串(所有字母均大写),输出打字员本来想打出的句子。输入保证合法,即一定是错位之后的字符串。例如输入中不会出现大写字母A。样例输入OS,GO......
  • 例题3-1 TeX中的引号(Tex Quotes, UVa 272)
    题目在TeX中,左双引号是“``”,右双引号是“''”。输入一篇包含双引号的文章,你的任务是把它转换成TeX的格式。样例输入"Tobeornottobe,"quoththeBard,"thatisthequestion".样例输出``Tobeornottobe,''quoththeBard,``thatisthequestion''.思路依......
  • 解决tabix建索引报错[E::hts_idx_push] Unsorted positions on sequence #
    当我对两个基因型文件位置取交集,并重新生成两个vcf:$bcftoolsview-Roverlap.lstvariant.filter.vcf.gz-Oz-o300.vcf.gz出现如下错误:$tabix300.vcf.gz[E::hts_idx_push]Unsortedpositionsonsequence#4:29013869followedby29013853tbx_index_buildfailed:300.......
  • CF1770F Koxia and Sequence
    CF1770FKoxiaandSequence题目链接。\(\text{difficulty}={\color{red}6},1\)。\(\text{tags}=组合数学,子集反演,容斥原理,二进制\)。神仙题。首先进行观察。由于......
  • CF743B Chloe and the sequence 题解 分治
    题目链接:http://codeforces.com/problemset/problem/743/B题目大意:对于一个n-序列,如果n==0,那么它是一个空的序列(也就是说空序列中没有元素)。然后会进行i次操作,每次......
  • CF1806C-Sequence Master
    题目地址题意:给出m和一个长度为2m的数组a,令数组b长度也为m,且对于b任意一个长度为m的子序列的积等于剩下的和,求出最小的Σ|a[i]-b[i]|Solution显然只有一下几种情况:1.m=......
  • [ABC276G] Count Sequences 题解
    考虑差分,设\(d_i=a_i-a_{i-1}\),特别的,\(d_1=a_1\),那么约束就变成了\(\displaystyle\sumd_i\lem\)。对所有\(i>1\)有\(d_i\not\equiv0\pmod3\)。发现\(d_1\)......