站外OJ题求助
  • 板块学术版
  • 楼主Juruoviet
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/6/16 19:26
  • 上次更新2023/10/27 23:12:40
查看原帖
站外OJ题求助
538392
Juruoviet楼主2022/6/16 19:26

原题

蒜头君睡了很久,起来的时候蒜头君在想,我到底睡了多久?

他只记得自己是 y1,m1,d1 睡的,现在已经 y2,m2,d2。好麻烦呀,这么麻烦事情还是交给聪明的你吧,谁让你那么聪明呢。

输入格式 输入两行。

第一行输入三个整数,表示 y1,m1,d1 第二行输入三个整数,表示 y2,m2,d2 。

输出格式 输出一个整数,表示蒜头君睡了多久。

数据范围 1≤ 所有数据≤3000,其中所有的日期都是合法的。

我是这样写的,一个点都没过,还段错误,运行时间超长

#include <iostream>
#include <cstdio>
using namespace std;
typedef unsigned long long ll;
ll Days[2][13] = {
  {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
  {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
ll isleap (ll y) {
    if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
        return 366;
    }
    return 365;
}
ll getDate(ll y, ll m,ll d) {
    ll res = d;
    ll flag = isleap(y);
    for (ll i = 1; i < m; i++) {
        res += Days[flag][i];
    }
    return res;
}

int main(){
    ll y1,m1,d1,y2,m2,d2,ans=0;
    scanf("%lld %lld %lld",&y1,&m1,&d1);
    scanf("%lld %lld %lld",&y2,&m2,&d2);
    for(ll i = y1; i <= y2-1; i++){
        ans+=isleap(i);
    }
    ans-=getDate(y1,m1,d1);
    ans+=getDate(y2,m2,d2);
    printf("%lld",ans);
}
2022/6/16 19:26
加载中...