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. delete操作字符串会报错吗?

    其实是不会的."delete只能对对象属性进行操作"的说法是错误的,严谨来说,delete可以对任意变量类型进行操作,只不过只有对对象的属性才能操作成功,对其他变量类型操作失败罢了 ...

  2. IMLite轻量级即时通信工具开发指南

    花了一周时间开发了一个简单的即时通信工具,勉强算是程序原型.现在我把开发流程和一些个人的想法记录下来.本文首先介绍程序架构和通信接口,之后会聚焦到服务器的信号槽设计原则,接下来将解释有关TCP通信的粘 ...

  3. Spring Boot 1.4测试的改进

    对Pivotal团队来说,工作上的好事情是他们拥有一个被叫做Pivotal Labs的灵活发展部门,拥有Labs团队的Lean 和 XP程序设计方法学的强大支持,例如结对编程和测试驱动开发.他们对于测 ...

  4. 线程池的submit和execute方法区别

    线程池中的execute方法大家都不陌生,即开启线程执行池中的任务.还有一个方法submit也可以做到,它的功能是提交指定的任务去执行并且返回Future对象,即执行的结果.下面简要介绍一下两者的三个 ...

  5. Linux快速搭建FTP服务器

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(A ...

  6. 使用 js 设置组合快捷键,支持多个组合键定义,还支持 React

    ╭┈┈╮ ╭┈┈╮ ╭┈┈╮ ┆ ├┈┈..┈┈┈┈┈.┆ └┈╮┆ ├┈┈..┈┈┈┈┈..┈┈.┈┈..┈┈┈┈┈. ┆ ┆┆ □ ┆┆ ┈┤┆ < ┆ -__┘┆ ┆ ┆┆__ ┈┈┤ ╰ ...

  7. Android一个小巧的记录app(便签或者日记 随心)

    入驻博客园两个月今天第一次发随笔,,话不多说,直接上图展示效果 主界面用的RecyclerView的瀑布流(StaggeredGridLayoutManager),同时加上Floatbutton悬浮按 ...

  8. JS图片更换还原操作,通过图片识别标识

    //图片更换还原操作,图片识别标识 如图片img.png 可换成 img2.png function img_biaoshi(caozuo,img_id, biaoshi) { var img_src ...

  9. 跨平台原生AR/VR应用研发引擎-NVisionXR开放内测

      NVisionXR引擎正式开放内测.现在,对原生AR/VR应用开发有兴趣的企业和开发者均可通过NVisionXR官网(www.nvisionxr.com)申请试用. NVisionXR引擎介绍视频 ...

  10. Java终结方法的使用(终结守卫者)

    终结方法finalize()通常是不可预测的,也是很危险的,一般情况下是不必要的. Java语言规范并不保证finalize()会被及时执行,即不确定终结方法执行时间,只规定在对象被垃圾回收之前执行 ...