https://vjudge.net/problem/ZOJ-3950

题意:

给出两个日期,计算从第一个日期开始到第二个日期,每一天的日期中的9加起来一共有多少个。

思路:

看题解补的题。首先看这题的数据量,样例就有10的5次方个,而且那只能考虑O(1)的算法喽,那么就对日期进行一个大的预处理。把从2000,1,1到10000,1,1的显示的9全部算出来,然后查询的时候直接相减,每次查询只有O(1)的复杂度。具体还是看代码啦。

代码:

 #include <stdio.h>
#include <string.h> int sum[][][],pre[][][];
int mon[] = {,,,,,,,,,,,,}; int leap(int x)
{
if (x % == ) return ;
if (x % == ) return ;
if (x % == ) return ; return ;
} int check(int y,int m,int d)
{
int num = ; while (y)
{
y % == ? ++num : num += ;
y /= ;
} while (m)
{
m % == ? ++num : num += ;
m /= ;
} while (d)
{
d % == ? ++num : num += ;
d /= ;
} return num;
} void init(int y1,int m1,int d1,int y2,int m2,int d2)
{
int tmp = ; while (y1 != y2 || m1 != m2 || d1 != d2)
{
mon[] = leap(y1) + ; pre[y1][m1][d1] = tmp;//tmp是到前一个日期显示的9的数量。 tmp += check(y1,m1,d1); sum[y1][m1][d1] = tmp;//现在的日期显示的9的数量 if (++d1 > mon[m1])
{
d1 = ; if (++m1 > )
{
m1 = ;
mon[] = + leap(++y1);
}
}
}
} int main()
{
int t; scanf("%d",&t); init(,,,,,); while (t--)
{
int y1,m1,d1,y2,m2,d2; scanf("%d%d%d%d%d%d",&y1,&m1,&d1,&y2,&m2,&d2); printf("%d\n",sum[y2][m2][d2] - pre[y1][m1][d1]);//结束日期减去开始日期之前的那天,因为开始日期也要算的。
} return ;
}

zoj 3950 how many nines的更多相关文章

  1. ZOJ - 3950 How Many Nines 【前缀和】

    题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3950 题意 给出两个日期 求 这个日期 经过 到 另外一个日期 ...

  2. How Many Nines ZOJ - 3950 打表大法好

    If we represent a date in the format YYYY-MM-DD (for example, 2017-04-09), do you know how many 9s w ...

  3. ZOJ 17届校赛 How Many Nines

    If we represent a date in the format YYYY-MM-DD (for example, 2017-04-09), do you know how many 9s w ...

  4. ZOJ How Many Nines 模拟 | 打表

    How Many Nines Time Limit: 1 Second      Memory Limit: 65536 KB If we represent a date in the format ...

  5. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

  6. ZOJ 3686 A Simple Tree Problem

    A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a rooted tree, each no ...

  7. ZOJ Problem Set - 1394 Polar Explorer

    这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...

  8. ZOJ Problem Set - 1392 The Hardest Problem Ever

    放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...

  9. ZOJ Problem Set - 1049 I Think I Need a Houseboat

    这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...

随机推荐

  1. 一个类似抖音 APP 拍摄按钮效果的控件

    TouchButton 一个类似抖音 APP 拍摄按钮效果的控件 效果图预览 用法 <net.angrycode.library.TouchButton android:id="@+i ...

  2. SSM 使用 mybatis 分页插件 pagehepler 实现分页

    使用分页插件的原因,简化了sql代码的写法,实现较好的物理分页,比写一段完整的分页sql代码,也能减少了误差性. Mybatis分页插件 demo 项目地址:https://gitee.com/fre ...

  3. python 一篇就能理解函数基础

    一,函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过 ...

  4. Algorithm --> 全排列

    1.算法简述 简单地说:全排列就是从第一个数字起每个数分别与它后面的数字交换. E.g:E = (a , b , c),则 prem(E)= a.perm(b,c)+ b.perm(a,c)+ c.p ...

  5. 初始css

    1.CSS规则由两部分构成,即选择器和声明器 声明必须放在{}中并且声明可以是一条或者多条 每条声明由一个属性和值构成,属性和值用冒号分开,每条语句用英文冒号分开 注意: css的最后一条声明,用以结 ...

  6. oracle、导出、导入

    一.数据库导入: No1.查询所有表中那些是空表. select table_name from user_tables where NUM_ROWS=0; No2.拼接字符串生成SQL执行语句. s ...

  7. Mysql性能优化之覆盖索引

    因为我们大多数情况下使用的都是Innodb,所以这篇博客主要依据Innodb来讲 b+树(图片来自网络) b+树图来自网络 1.聚集索引与非聚集索引区别 聚集索引:叶子节点包含完整的数据(物理地址连续 ...

  8. 网络1712--c语言一二维数组作业总结

    1.成绩摆前头 1.1基本要求(1分) 按时交 - 有分 未交 - 0分 迟交一周以上 - 倒扣本次作业分数 抄袭 - 0分 泛泛而谈(最多七分) 1.2评分要点 PTA作业总结(4分) 同学代码互评 ...

  9. 201621123062《java程序设计》第13周作业总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 思维导图: 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多 ...

  10. iOS开发-即时通信XMPP

    1. 即时通信 1> 概述 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷,服务提供商也提供了越来越丰富的通讯服务功能 ...