BZOJ 2898 模拟

普及组水题.

按位模拟第一个序列和第二个序列,细节比较多..

仅为部分看后面两位的和,如果大于10就近位小于8就不进位等于9就看下一位.

 1 #include <cstdio>
 2 #define LL long long
 3 LL Bin[20],K,Ten[20],SqrA[20],SqrB[20],Sqr[20];
 4 inline LL Get_A(LL x)
 5 {
 6     LL Pos;
 7     for (LL i=1;i<=19;i++) if (x<=Bin[i]) {Pos=i; break;}
 8     x=x-Bin[Pos-1];
 9     LL t=(x-1)/Pos+1;
10     x=x-(t-1)*Pos;
11     t=Ten[Pos]+t-1;
12     for (LL i=1;i<=Pos-x;i++) t=t/10;
13     return t%10;
14 }
15 inline LL Get_B(LL x)
16 {
17     LL Pos;
18     for (LL i=1;i<=19;i++) if (x<=Sqr[i]) {Pos=i; break;}
19     x=x-Sqr[Pos-1];
20     LL t=(x-1)/Pos+1;
21     x=x-(t-1)*Pos;
22     t=t+SqrA[Pos]-1;
23     t=t*t;
24     for (LL i=1;i<=Pos-x;i++) t=t/10;
25     return t%10;
26 }
27 LL Get_F(LL x)
28 {
29     LL Ret=Get_A(x)+Get_B(x);
30     if (Ret>=10) return 1;
31     if (Ret<=8) return 0;
32     return Get_F(x+1);
33 }
34 inline void Init()
35 {
36     Ten[1]=1; for (LL i=2;i<=19;i++) Ten[i]=Ten[i-1]*10;
37     Bin[1]=9; for (LL i=2;i<=19;i++) Bin[i]=Bin[i-1]*10;
38     for (LL i=1;i<=19;i++) Bin[i]=Bin[i]*i;
39     for (LL i=1;i<=19;i++) Bin[i]=Bin[i]+Bin[i-1];
40
41     SqrA[1]=1,SqrB[1]=3;
42     SqrA[2]=4,SqrB[2]=9;
43     SqrA[3]=10,SqrB[3]=31;
44     SqrA[4]=32,SqrB[4]=99;
45     SqrA[5]=100,SqrB[5]=316;
46     SqrA[6]=317,SqrB[6]=999;
47     SqrA[7]=1000,SqrB[7]=3162;
48     SqrA[8]=3163,SqrB[8]=9999;
49     SqrA[9]=10000,SqrB[9]=31622;
50     SqrA[10]=31623,SqrB[10]=99999;
51     SqrA[11]=100000,SqrB[11]=316227;
52     SqrA[12]=316228,SqrB[12]=999999;
53     SqrA[13]=1000000,SqrB[13]=3162277;
54     SqrA[14]=3162278,SqrB[14]=9999999;
55     SqrA[15]=10000000,SqrB[15]=31622776;
56     SqrA[16]=31622777,SqrB[16]=99999999;
57     SqrA[17]=100000000,SqrB[17]=316227766;
58     SqrA[18]=316227767,SqrB[18]=999999999;
59     SqrA[19]=1000000000,SqrB[19]=2147483647;
60     for (LL i=1;i<=19;i++) Sqr[i]=Sqr[i-1]+(SqrB[i]-SqrA[i]+1)*i;
61 }
62 int main()
63 {
64     scanf("%lld",&K);
65     Init();
66     printf("%lld\n",(Get_A(K)+Get_B(K)+Get_F(K+1))%10);
67     return 0;
68 }

C++

时间: 2024-08-02 19:23:32

BZOJ 2898 模拟的相关文章

9.29 奶牛练习题

/*bzoj 1613*/ /*暴力5884ms*/ #include<cstdio> #define maxn 10010 using namespace std; int n,m,a[maxn],f[maxn][510]; int max(int x,int y){ return x>y?x:y; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d&

【BZOJ】【2741】【FOTILE模拟赛】L

可持久化Trie+分块 神题……Orz zyf & lyd 首先我们先将整个序列搞个前缀异或和,那么某一段的异或和,就变成了两个数的异或和,所以我们就将询问[某个区间中最大的区间异或和]改变成[某个区间中 max(两个数的异或和)] 要是我们能将所有[l,r]的答案都预处理出来,那么我们就可以O(1)回答了:然而我们并不能. 一个常见的折中方案:分块! 这里先假设我们实现了一个神奇的函数ask(l,r,x),可以帮我们求出[l,r]这个区间中的数,与x最大的异或值. 我们不预处理所有的左端点,我

BZOJ 1088 水模拟

BZOJ水一道~ 枚举前两个位置是否放雷,模拟向下推.能够则ans++ #include "stdio.h" #include "string.h" int a[10010],b[10010],n; int judge() { int i; for (i=3;i<=n;i++) { b[i]=a[i-1]-b[i-1]-b[i-2]; if (b[i]<0) return 0; if (b[i]>1) return 0; } if (b[n-1]+

BZOJ 3893 Usaco2014 Dec Cow Jog 模拟

题目大意:给出n头牛他们的初始位置和各自的速度,一头牛追上另一头牛之后这两头牛会变成一头牛,问最后剩下几头牛. 思路:简单模拟一下不难发现,我们只要算出如果正常行驶每头牛的最后到达的地点,从后往前扫一下,有多少个单调不减的序列就是最后有多少头牛. CODE: #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> #include <iostream> #include <algor

BZOJ 3750: [POI2015]Piecz?? 【模拟】

Description 一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色. 你有一个a*b的印章,有些格子是凸起(会沾上墨水)的.你需要判断能否用这个印章印出纸上的图案.印的过程中需要满足以下要求: (1)印章不可以旋转. (2)不能把墨水印到纸外面. (3)纸上的同一个格子不可以印多次. Input 第一行一个整数q(1<=q<=10),表示测试点数量. 接下来q个测试点,每个测试点中: 第一行包含4个整数n,m,a,b(1<=n,m,a,b<=1000). 接下

bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie

2741: [FOTILE模拟赛]L Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1116  Solved: 292[Submit][Status] Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max(Ai xor Ai+1 xor Ai+2 ... xor Aj),其中l<=i<=j<=r. 为了体现在线操作,对于一个询问(x,y):

[BZOJ入门OJ2092][Noip模拟题]舞会

2092: [Noip模拟题]舞会 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 9  Solved: 5 [Submit][Status][Web Board] Description 学校举行舞会啦,一共有N个人参加,所有人站成一排,从左开始编号,最左边的人编号为1 ,最右边的为N.每个人跳舞的熟练度我们用一个整数表示,第i个人的熟练度为Ai,每次熟 练度最接近的一对相邻男女会出列跳舞,如果有多对那么最左边的那一对会先出列,请你给 出出列跳

BZOJ 1206 [HNOI2005]虚拟内存:模拟

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1206 题意: 内存大小为n(外存无限大),共有m次访问,每一次访问的信息编号为p. 对于每一条信息,不在内存中,就在外存中. 内存和外存的访问速度不同.为了提高整体的访问速度,有这样一种内存管理的算法: (1)如果p在内存中,直接访问,算法结束.否则转步骤(2). (2)如果内存有剩余空间,则将p由外存转移到内存中来,算法结束.否则转步骤(3). (3)选出内存中访问次数最少的一条信息(

BZOJ 1142 [POI2009]Tab 模拟

题意:链接略 方法:模拟 解析: 首先如果您做过高三那么您一定清楚,一个矩阵通过任意行列变换后得到的矩阵满足一种性质:原来在哪一行的元素还在那一行,原来在哪一列的元素还在那一列. 并且行列内部元素可以任意交换. 所以暴力验证即可. 代码附带5K读入优化,怒艹BZOJrnk1 代码: #include<cstdio> #include<cstring> #include<cctype> #include<cstdarg> #include <iostre