题目1 : 闰秒

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

计算机系统中使用的UTC时间基于原子钟,这种计时方式同“地球自转一周是24小时”的计时方式有微小的偏差。为了弥补这种偏差,我们偶尔需要增加一个“闰秒”。

最近的一次闰秒增加发生在UTC时间2016年的最后一天。我们在2016年12月31日23时59分59秒和2017年1月1日0时0分0秒之间增加了这样一秒:2016年12月31日23时59分60秒,记作2016-12-31 23:59:60。

目前一共增加了27次闰秒,具体添加的时间见下表:

给出两个时间,请你判断在考虑闰秒的情况下,这两个时间间隔多少秒。

输入

两个时间各占一行,格式是yyyy-MM-dd HH:mm:ss,范围在1970-01-01 00:00:00至2017-03-12 23:59:59之间。保证第一个时间不晚于第二个时间。

输出

两个时间间隔多少秒。

样例输入
  1. 2016-12-31 23:59:59
  2. 2017-01-01 00:00:00
样例输出
  1. 2

暴力模拟就好了,用ans[2]-ans[1]。

  1. #include <stdio.h>
  2. #include <cstring>
  3. #include <cmath>
  4. using namespace std;
  5. typedef long long ll;
  6. ll ans[];
  7. int Y[]= {,,,,,,,,,,,,}; //nor
  8. char c[][][]; // 0 y-m-d 1 h-mi-s
  9. int y[],m[],d[],h[],mi[],s[];
  10. int data[][];
  11. bool runnian(int a)
  12. {
  13. if((a%==&&a%!=)||a%==) return ;
  14. else return ;
  15. }
  16. void debug()
  17. {
  18. printf("%d %d %d**\n",y[],m[],d[]);
  19. printf("%d %d %d\n",h[],mi[],s[]);
  20. printf("%d %d %d\n",y[],m[],d[]);
  21. printf("%d %d %d\n",h[],mi[],s[]);
  22. }
  23. void init()
  24. {
  25. memset(ans,,sizeof(ans));
  26. memset(y,,sizeof(y));
  27. memset(m,,sizeof(m));
  28. memset(d,,sizeof(d));
  29. memset(h,,sizeof(h));
  30. memset(mi,,sizeof(mi));
  31. memset(s,,sizeof(s));
  32. data[][]=;
  33. data[][]=;
  34. for(int i=; i<=; i++) data[i][]=;
  35. for(int i=; i<=; i++) data[i][]=;
  36. data[][]=;
  37. data[][]=;
  38. data[][]=;
  39. data[][]=;
  40. for(int i=; i<=; i++) data[i][]=;
  41. data[][]=;
  42. data[][]=;
  43. data[][]=;
  44. data[][]=;
  45. data[][]=;
  46. data[][]=;
  47. data[][]=;
  48. data[][]=;
  49. }
  50.  
  51. ll ansy=**;
  52. ll calnian(int y)
  53. {
  54. ll ans=;
  55. for(int i=; i<=y; i++) //年
  56. {
  57. ans+=ansy;
  58. if(runnian(i)) ans+=**;
  59. if(data[i][]) ans++;
  60. if(data[i][]) ans++;
  61. }
  62. return ans;
  63. }
  64.  
  65. ll calyue(int y,int m)
  66. {
  67. ll ans=;
  68. for(int j=; j<=m; j++) //月
  69. {
  70. ans+=Y[j]***;
  71. if(j==&&runnian(y)) ans+=**; //闰年2月+一天
  72. if(j==&&data[y][]) ans++;//闰秒也要
  73. if(j==&&data[y][]) ans++;
  74. }
  75. return ans;
  76. }
  77.  
  78. ll calday(int y,int m,int d)
  79. {
  80. int f=;
  81. ll ans=;
  82. if(runnian(y)&&m==) ans+=*;
  83. ans+=d**;
  84. if(m==&&data[y][]) ans++;
  85. return ans;
  86. }
  87.  
  88. int main()
  89. {
  90. init();
  91. for(int i=; i<=; i++)
  92. scanf("%d-%d-%d %d:%d:%d",&y[i],&m[i],&d[i],&h[i],&mi[i],&s[i]);
  93. //debug();
  94. for(int x=; x<=; x++)
  95. {
  96. ans[x]+=calnian(y[x]-);
  97. ans[x]+=calyue(y[x],m[x]-);
  98. ans[x]+=calday(y[x],m[x],d[x]-);
  99. ans[x]+=h[x]*;
  100. ans[x]+=mi[x]*;
  101. ans[x]+=s[x];
  102. }
  103. printf("%lld\n",ans[]-ans[]);
  104. return ;
  105. }

题目2 : 水陆距离

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个N x M的01矩阵,其中1表示陆地,0表示水域。对于每一个位置,求出它距离最近的水域的距离是多少。

矩阵中每个位置与它上下左右相邻的格子距离为1。

输入

第一行包含两个整数,N和M。

以下N行每行M个0或者1,代表地图。

数据保证至少有1块水域。

对于30%的数据,1 <= N, M <= 100

对于100%的数据,1 <= N, M <= 800

输出

输出N行,每行M个空格分隔的整数。每个整数表示该位置距离最近的水域的距离。

样例输入
  1. 4 4
  2. 0110
  3. 1111
  4. 1111
  5. 0110
样例输出
  1. 0 1 1 0
  2. 1 2 2 1
  3. 1 2 2 1
  4. 0 1 1 0

宽搜,只搜终点,搜过的点再加到队列里。

  1. #include <queue>
  2. #include <vector>
  3. #include <stdio.h>
  4. #include <iostream>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. #include <algorithm>
  8. using namespace std;
  9. const int inf=0x3f3f3f3f;
  10. const int maxn=;
  11. int n,m;
  12. int dir[][]={{,},{,-},{,},{-,}};
  13. int vis[maxn][maxn];
  14. char str[maxn][maxn];
  15. int ans[maxn][maxn];
  16. struct point{
  17. int x,y;
  18. }sna[maxn*maxn];
  19. struct edge{
  20. int x,y,step;
  21. };
  22. queue<edge>que;
  23. void bfs(){
  24. edge c,ne;
  25. while(!que.empty()){
  26. c=que.front();que.pop();
  27. for(int i=;i<;i++){
  28. int xx=c.x+dir[i][];
  29. int yy=c.y+dir[i][];
  30. if(xx<||xx>n-||yy<||yy>m-||vis[xx][yy]==) continue;
  31. // ans[xx][yy]=c.step+1;
  32. ans[xx][yy]=c.step+;
  33. ne.x=xx;ne.y=yy;ne.step=c.step+;
  34. vis[ne.x][ne.y]=;
  35. que.push(ne);
  36. }
  37. }
  38. }
  39. int main(){
  40. while(scanf("%d%d",&n,&m)!=-){
  41. while(!que.empty()) que.pop();
  42. memset(vis,,sizeof(vis));
  43. for(int i=;i<n;i++) scanf("%s",str[i]);
  44. for(int i=;i<n;i++) for(int j=;j<m;j++) ans[i][j]=inf;
  45. for(int i=;i<n;i++){
  46. for(int j=;j<m;j++){
  47. if(str[i][j]==''){
  48. ans[i][j]=;vis[i][j]=;
  49. edge c;
  50. c.x=i;c.y=j;c.step=;
  51. que.push(c);
  52. }
  53. }
  54. }
  55. bfs();
  56. // for(int i=0;i<n;i++) for(int j=0;j<m;j++) ans[i][j]=min(ans[i][j],st[i][j]);
  57. for(int i=;i<n;i++){
  58. for(int j=;j<m;j++){
  59. if(j==m-) printf("%d\n",ans[i][j]);
  60. else printf("%d ",ans[i][j]);
  61. }
  62. }
  63. }
  64. return ;
  65. }

题目2 : 出勤记录II

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

小Hi的算法课老师每次上课都会统计小Hi的出勤记录。迟到会被记录一个L,缺席会被记录一个A,按时上课会被记录一个O。

一学期结束,小Hi的出勤记录可以看成是一个只包含LAO的字符串,例如"OOOOLOOOLALLO……"。

如果小Hi整学期缺席不超过1次,并且没有连续3次迟到,小Hi的出勤记录就算合格。

现在给出字符串的长度N,小Hi想知道长度为N的出勤记录中,合格的记录总共有多少种。

例如长度为3的合格出勤记录有19种:OOO OOL OOA OLO OAO LOO AOO OLL OLA OAL LOL LOA AOL LLO LAO ALO LLA LAL ALL。

输入

一个整数N(1 <= N <= 100000)。

输出

长度为N的合格记录总数。由于结果可能很大,你只需输出结果模109+7的余数。

样例输入
  1. 3
样例输出
  1. 19

DP,一共6种状态。

012代表有A,0代表以A或O结尾,1代表以L结尾,2代表以LL结尾。

345代表无A,3代表以O结尾,4代表以L结尾,5代表以LL结尾。

而6代表总数。

转移一下就好了,转移方程见代码。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. typedef long long ll;
  6. const ll mod=1e9+;
  7. ll dp[][];
  8. int main()
  9. {
  10. int n;
  11. memset(dp,,sizeof(dp));
  12. dp[][]=;
  13. dp[][]=;dp[][]=dp[][]=dp[][]=;
  14. dp[][]=;dp[][]=;dp[][]=;
  15. for(int i=;i<=;i++)
  16. {
  17. dp[i][]=(dp[i-][]+dp[i-][]+dp[i-][]+
  18. dp[i-][]+dp[i-][]+dp[i-][])%mod;
  19. dp[i][]=dp[i-][]%mod;
  20. dp[i][]=dp[i-][]%mod;
  21. dp[i][]=(dp[i-][]+dp[i-][]+dp[i-][])%mod;
  22. dp[i][]=dp[i-][]%mod;
  23. dp[i][]=dp[i-][]%mod;
  24. dp[i][]=(dp[i][]+dp[i][]+dp[i][]+
  25. dp[i][]+dp[i][]+dp[i][])%mod;
  26. }
  27. while(scanf("%d",&n)!=EOF)
  28. printf("%lld\n",dp[n][]);
  29. return ;
  30. }

[Offer收割]编程练习赛9,10的更多相关文章

  1. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  2. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  3. [Offer收割]编程练习赛46

    [Offer收割]编程练习赛46赛后题解 A.AEIOU 分析

  4. hihocoder offer收割编程练习赛10 C 区间价值

    思路: 令v[l, r](0<= l <= r < n)表示区间[l,r]的价值,则长度为n的区间的价值最少为0,最多为n*(n-1)/2.整体对价值二分,求能满足sum{v[l, ...

  5. 【[Offer收割]编程练习赛10 C】区间价值

    [题目链接]:http://hihocoder.com/problemset/problem/1483 [题意] 中文题 [题解] 二分最后的答案; 二分的时候; 对于每一个枚举的值x; 计算小于等于 ...

  6. 【[Offer收割]编程练习赛10 B】出勤记录II

    [题目链接]:http://hihocoder.com/problemset/problem/1482 [题意] [题解] 递推题. 每次增加3个字符中的一个;然后根据下面这个数组递推; 递推方式看程 ...

  7. HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)

    描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...

  8. [Offer收割]编程练习赛48

    题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...

  9. [Offer收割]编程练习赛5-1 小Ho的防护盾

    #1357 : 小Ho的防护盾 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho的虚拟城市正在遭受小Hi的攻击,小Hi用来攻击小Ho城市的武器是一艘歼星舰,这艘歼星 ...

随机推荐

  1. delphi简单单向字符串加密函数

    delphi用久了有的时候得给密码加密一下,简单点就行了,这个函数还是不错的. const XorKey:array[0..7] of Byte=($B2,$09,$AA,$55,$93,$6D,$8 ...

  2. jquery Ajax noConflict()

    如果幾個框架都在使用$作為標識符,那麼這個時候可以使用noConflict()處理衝突. 可以直接使用jquery代替簡寫,也可以定義變量,也可以將$賦值給ready函數,函數內部可以使用快捷方式,不 ...

  3. BZOJ2843极地旅行社&BZOJ1180[CROATIAN2009]OTOCI——LCT

    题目描述 给出n个结点以及每个点初始时对应的权值wi.起始时点与点之间没有连边.有3类操作:  1.bridge A B:询问结点A与结点B是否连通. 如果是则输出“no”.否则输出“yes”,并且在 ...

  4. Java“禁止”泛型数组

    Java“禁止”泛型数组 原文:https://blog.csdn.net/yi_Afly/article/details/52058708 1. 泛型定义泛型编程是一种通过参数化的方式将数据处理与数 ...

  5. [hgoi#2019/3/10]赛后总结

    关于本次hg模拟赛,题目来源于CF1110. t1-无意义运算符(meaning) 题目描述 最大公约数和位运算之间有共同点吗?是时候来研究一下了. 给定一个正整数a,请找到一个闭区间[1,a-1] ...

  6. Selenium之WebDriver元素定位方法

    Selenium WebDriver 只是 Python 的一个第三方框架, 和 Djangoweb 开发框架属于一个性质. webdriver 提供了八种元素定位方法,python语言中也有对应的方 ...

  7. A1052. Linked List Sorting

    A linked list consists of a series of structures, which are not necessarily adjacent in memory. We a ...

  8. 【洛谷P3586】LOG

    题目大意:维护一个集合,支持单点修改.查询小于 X 的数的个数.查询小于 X 的数的和. 题解:学习到了动态开点线段树.对于一棵未经离散化的权值线段树来说,对于静态开点来说,过大的值域会导致不能承受的 ...

  9. javascript高级程序设计第一章有感

    第一章JavaScript简介 Javascript的诞生最早是为了处理表单数据验证的问题,以前主要是使用perl这个强大的服务端脚本语言处理的.在未诞生javascript之前, 人们每次提交表单就 ...

  10. 2018.10.2浪在ACM 集训队第二次测试赛

    2018.10.26 浪在ACM 集训队第二次测试赛 题目一览表 来源 考察知识点 A 1273 海港 NOIP 普及组 2016 差分数组+二分 B 1274 魔法阵     C 1267 金币   ...