zoukankan      html  css  js  c++  java
  • HUST 1599 Multiple

      题目大意  是给你一个字符串,问其中有多少个字串代表的数字能被64整除(注意不能有前导0 且 单独的'0'也是可以的)。    这题里的64是有些特殊的,,,因为1000000刚好能够整除64,这里就是突破口。    先预处理出字符串中不为0的数字的前缀和,,然后嵌套两个循环,将下标i从0扫到n-6,每次再暴搜i至i+6内的能整除64的个数,   再加上i下标的前缀和的数值。   

      放代码吧。。。:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 #include <cmath>
     6 #include <cstdlib>
     7 #include <cctype>
     8 #include <queue>
     9 #include <stack>
    10 #include <map>
    11 #include <vector>
    12 #include <set>
    13 #include <utility>
    14 #define ll long long
    15 #define inf 0x3f3f3f3f
    16 using namespace std;
    17 
    18 char str[300005];
    19 int len;
    20 int front_sum[300005];
    21 void init()  //预处理前缀和
    22 {
    23     len=strlen(str);
    24     front_sum[0]=!!(str[0]-'0');
    25     for(int i=1;i<len-6;i++)
    26         if(str[i]-'0')
    27             front_sum[i]=front_sum[i-1]+1;
    28         else
    29             front_sum[i]=front_sum[i-1];
    30 }
    31 ll solve()
    32 {
    33     ll res=0;
    34     for(int i=0;i<len;i++)
    35     {
    36         int num=0;
    37         if(str[i]=='0') //如果为0则也是一种情况
    38             res++;
    39         for(int j=0;j<6&&i+j<len;j++) //暴搜6位以内的个数
    40         {
    41             num=num*10+str[i+j]-'0';
    42             if(num%64==0&&str[i]!='0') //不能有前导0存在
    43                 res++;
    44         }
    45         if(num%64==0&&i+5<len&&i>0) //num为64倍数 且 该i到j这段的长度>=6 且 i不为第一个
    46             res+=front_sum[i-1];
    47     }
    48     return res;
    49 }
    50 int main()
    51 {
    52     //freopen("input.txt","r",stdin);
    53     while(scanf("%s",str)!=EOF)
    54     {
    55         init();
    56         ll res=solve();
    57         printf("%lld
    ",res);
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    Android Service 启动和停止服务
    Android 子线程中进行UI操作遇到的小问题
    JZ66 机器人的运动范围
    JZ65 矩阵中的路径
    JZ64 滑动窗口的最大值
    JZ63 数据流中的中位数
    Z62 二叉搜索树的第k个结点
    JZ61 序列化二叉树
    JZ60 把二叉树打印成多行
    JZ59 按之字形顺序打印二叉树
  • 原文地址:https://www.cnblogs.com/geek1116/p/5685108.html
Copyright © 2011-2022 走看看