zoukankan      html  css  js  c++  java
  • hihocoder1148 February 29(区间闰年计数)

    hihocoder1148https://hihocoder.com/problemset/problem/1148

    因为题目没有给范围,我本来是这么写的。

    1 for(int i = 0; i <= 10000; i++){
    2     if(i%4==0&&i%100!=0||i%400==0){
    3             cnt++;
    4     }
    5     memo[i] = cnt;
    6 }

    然后RE了,事实证明长度还是很大的。

    本题的关键在于利用计算闰年的方法巧妙地实现类似以上的计数。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cstdlib>
     6 #include<string>
     7 #include<cmath>
     8 #include<vector>
     9 #include<stack>
    10 #include<iterator>
    11 #include<queue>
    12 #include<cctype>
    13 #include<map>
    14 #define lson l, m, rt<<1
    15 #define rson m+1, r, rt<<1|1
    16 #define IO ios::sync_with_stdio(false);cin.tie(0);
    17 #define INF 0x3f3f3f3f
    18 #define MAXN 100010
    19 const int MOD=1e9+7;
    20 typedef long long ll;
    21 using namespace std;
    22 int n, d1, d2, yy1, y2;
    23 char s1[110], s2[110];
    24 map<string, int> mp;
    25 int main()
    26 {
    27     cin >> n;
    28     int kase=0, cnt=0;
    29     mp["January"]=1;mp["February"]=2;mp["March"]=3;
    30     mp["April"]=4;mp["May"]=5;mp["June"]=6;
    31     mp["July"]=7;mp["August"]=8;mp["September"]=9;
    32     mp["October"]=10;mp["November"]=11;mp["December"]=12;
    33     for(int i = 0; i < n; i++){
    34         cnt=0;
    35         scanf("%s %d, %d", s1, &d1, &yy1);
    36         scanf("%s %d, %d", s2, &d2, &y2);
    37         if(yy1 != y2){
    38             //容斥的感觉
    39             int k1 = yy1/4-yy1/100+yy1/400;
    40             int k2 = (y2-1)/4-(y2-1)/100+(y2-1)/400;
    41             cnt=k2-k1; 
    42            
    43             if(yy1%4==0&&yy1%100!=0||yy1%400==0){
    44                 if(mp[s1] <= 2){
    45                     cnt++;
    46                 }
    47             }
    48             if(y2%4==0&&y2%100!=0||y2%400==0){
    49                 if(mp[s2] > 2||mp[s2]==2&&d2==29){
    50                     cnt++;
    51                 }
    52             }  
    53         }  
    54         else{
    55             if(yy1%4==0&&yy1%100!=0||yy1%400==0){
    56                 if((mp[s1] <= 2)&&(mp[s2]>2||mp[s2]==2&&d2==29))
    57                     cnt++;
    58             }
    59         }
    60         cout << "Case #" << ++kase << ": ";
    61         cout << cnt << endl;
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    jquery.stop()停止动画
    字符串转义
    CSS规范 (命名)- 分类方法
    inline-block 间距
    jquery中offset(),position()
    PHP把数组转换为JSON字符串
    json对象
    C#-静态实例
    C#-readonly与const区别
    SQL-事务隔离级别与锁
  • 原文地址:https://www.cnblogs.com/Surprisezang/p/8678652.html
Copyright © 2011-2022 走看看