zoukankan      html  css  js  c++  java
  • 17.4.28 清北水题 2 循环序列

    循环序列

    (circulate.cpp/c/pas)

    (1s/256M)

    题目描述

    Alice与Bob在玩游戏:

    Alice首先给出两个数X与Y(X<=Y);

    Bob则按顺序将X,X+1,X+2,…,Y-1,Y写成一个大数S。

    Alice最后将S首尾相连,让其围成一个圈。

    这时,Bob想知道,从S的开头出发,往后的第L到第R数字之和是多少。

    输入格式(circulate.in)

    第一行四个整数X,Y,L,R,代表Alice的两个数字和Bob想要知道的第L位到第R位的数字之和。

    输出格式(circulate.out)

    仅一行,一个整数M,代表第L位到第R位的数字之和。

    样例输入

    10 11 4 12

    样例输出

    7

    样例解释

    Bob将数字写成一行大数S = 1011;围成一个圈后,从第4位到第12位分别是1,1,0,1,1,1,0,1,1,它们的和是7.

    数据范围与限制

    对于50%的数据,L=1, X,Y,L,R<=1000

    对于100%的数据,S的长度不大于10000X,Y,L,R<=100000000.

    模拟;

    我一上来就读错题,没想到A俩点;

     1 #include <cstdio>
     2 #include <cstring>
     3 using namespace std;
     4 const int N = 1001;
     5 int x, y, l, r;
     6 int n, a[N], s[N];
     7 int m, b[N];
     8 void work(int x, int y)
     9 {
    10     n = 0;
    11     for(int i=x; i<=y; i++)
    12     {    
    13         m = 0;
    14         int t=i;
    15         while(t!=0)
    16          {
    17              b[++m]=t%10;
    18              t/=10;
    19          }
    20         for(int t=m; t; t--) a[++n] = b[t];
    21     }    
    22     s[0] = 0;
    23     for(int i=1; i<=n; i++) s[i] = s[i-1] + a[i];
    24 }
    25 int cal(int p)
    26 {
    27     if(p == 0) return 0;
    28     int g = (p) / n;
    29     int r = (p) % n + 1;
    30     return s[n] * g + s[r];
    31 }
    32 int main()
    33 {
    34     scanf("%d%d", &x, &y);
    35     scanf("%d%d", &l, &r);
    36     work(x, y);    
    37     printf("%d
    ", cal(r) - cal(l-1));    
    38     return 0;
    39 }
  • 相关阅读:
    MQ的导出备份
    js中this的使用
    wordpress目录文件结构说明
    css3 rem的用法
    初探Backbone
    call 和 apply使用
    公告栏放honehoneclock和喂小老鼠flash
    什么是好单位与坏单位
    常用正则表达式
    gulp入门教程
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6783112.html
Copyright © 2011-2022 走看看