zoukankan      html  css  js  c++  java
  • UVa 10706

      题目大意:Sk表示从1到k的字符序列,如S4为1234,现如今有如下的序列S1S2...Sk,形如1 12 123 1234这样的序列,给一个数n,让你去这个序列第n个位置上的数字。

      可以构建出一个Sk序列的表格,然后用一个数组sum[i]记录该序列到i是有几位,这样就可以计算出n位于那个Sx序列中,求得在该序列中的位置,再查表即可。

     1 #include <cstdio>
     2 #include <cmath>
     3 #include <cctype>
     4 #include <climits>
     5 #define MAXN 100000
     6 
     7 long long sum[MAXN];
     8 char str[1000000];
     9 int k;
    10 
    11 void init()
    12 {
    13     k = sqrt(INT_MAX);
    14     int p = 0;
    15     for (int i = 1; i <= k; i++)
    16     {
    17         sprintf(&str[p], "%d", i);
    18         while (isdigit(str[p]))  p++;
    19     }
    20     int tmp = 0;
    21     sum[0] = 0;
    22     for (int i = 1; i <= k; i++)
    23     {
    24         int cnt = 0, t = i;
    25         while (t)
    26         {
    27             cnt++;
    28             t /= 10;
    29         }
    30         tmp += cnt;
    31         sum[i] = sum[i-1];
    32         sum[i] += tmp;
    33     }
    34 }
    35     
    36 int main()
    37 {
    38 #ifdef LOCAL
    39     freopen("in", "r", stdin);
    40 #endif
    41     init();
    42     int T;
    43     scanf("%d", &T);
    44     while (T--)
    45     {
    46         int n;
    47         scanf("%d", &n);
    48         int low = 1, high = k;
    49         while (low < high)
    50         {
    51             int mid = (low + high) / 2;
    52             if (n <= sum[mid])  high = mid;
    53             else  low = mid + 1;
    54         }
    55         int pos = n - sum[low-1];
    56         printf("%c
    ", str[pos-1]);
    57     }
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    使用Skaffold一键将项目发布到Kubernetes
    线性代数回头看——线性方程组
    Python 函数 初学者笔记
    Python 用户输入&while循环 初学者笔记
    Python If&字典 初学者笔记
    Python 变量&列表 初学者笔记
    SQL 常见优化指南
    垃圾回收机制
    MySQL 前缀索引
    MySQL 常用优化
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3280775.html
Copyright © 2011-2022 走看看