程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ZOJ 3403 Strange Calendar III

ZOJ 3403 Strange Calendar III

編輯:C++入門知識



Strange Calendar III

Time Limit: 2 Seconds Memory Limit: 65536 KB

As we know, in the Bzu planet and in the cc98 planet, people use special calendar which is similar to that used in the earth. In fact, in the BoMb planet, people use a similar calendar as well!

As a matter of fact, people who live in the BoMb planet are all from the earth after a big bomb blew up on the earth. Because of being used to the calendar in the earth, they use Day, Month and Year in the calendar in the BoMb too. But the operational cycle of the BoMb planet is so ridiculous that people have to make strange rules for their new calendar.

The rules are listed below:

For Year X, there are f(X) months in total, where f(X) = (X mod 12) + 1.For each year, there are i3 day(s) in the ith month.There are also leap years in the BoMb planet. For Year X, if X mod 11 = 0, it is considered as a leap year and there are 1 day more in the first month of the year.

Now given two dates in the format of BoMb calendar, you are to calculate how many days there are in total between the two days(include the two days).

Input

The input contains multiple test cases. There are only two lines in each test case. The first line is a string "m1-d1-y1", indicating the d1th day in the m1th month of Year y1. The second line is a string "m2-d2-y2" indicating the date of the other day. You can assume the two dates are legal in BoMb calendar and are diffrent, and y1 and y2 are in the range of [0, 109].

Output

For each test case, output a single line the number of days between the two days (include the two days) given in the input.

Sample Input

2-2-14
2-3-15

Sample Output

38

題目:給定一個特殊的年月日的定義:第n年有(n%12)+1個月,第i個月有i*i*i天,if(n%11)==0,那麼這年為閏年,改年的第一個月多一天。求給定的兩個日期之間一共有多少天。
思路:整體就是模擬就行,先打表把前12年的每月的天數求出來,同時把12年的總天數求出來。那麼計算時只需要計算n/12是多少,還有n%12年的天數單獨處理就行了。
代碼:
#include 
#include 
using namespace std;
int a[14][14];
long long sum=0;
void init()
{
    for(int i=1;i<=12;i++)
    {
        a[i][0]=0;
        for(int j=1;j<=i;j++)
        {
            a[i][j]=j*j*j;
            a[i][0]+=a[i][j];
        }
        sum+=a[i][0];
    }
}
struct node
{
    int m,d,y;
}l,r;
long long solve(node t)
{
    long long ans=0;
    int d=t.y/12,r=t.y%12;
    ans+=sum*d;                   //計算n裡面有多少個12年
    int i,j;
    for(i=1;i<=r;i++)             //單獨處理剩下的年份
    {
        ans+=a[i][0];
    }
    for(j=1;jr.y||l.y==r.y&&l.m>r.m||l.y==r.y&&l.m==r.m&&l.d>r.d)  //處理第一個日期在第二個日期後面的情況
        {
            swap(l.y,r.y);
            swap(l.m,r.m);
            swap(l.d,r.d);
        }
        l.d--;
        long long ans=solve(r)-solve(l);
        printf("%lld\n",ans);
    }
    return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved