2010-1159

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

by yuxingdubai
做法:
{{{
这道题是很简单的日历题.. 只要认真看清楚题目就没什么问题.
在做的时候开一个133*13的数组y[133][13]记录以下数据:
y[i][j]表示年份整除132(132年一个循环)模是i, 第j个月的天数, i!=132 && j!=0;
y[i][0]则表示年份year整除132(132年一个循环)模是i的整年共有多少天;
y[132][0]表示一个完整的循环132年共有多少天.
最后注意:
1. 天数包括头尾两天, 所以是时间间隔+1;
2. 后面的天数可能比前面的小;
3. 输出会超int, 所以要用long long. (我就是这里错了..555)
}}}

代码:
{{{
#!cpp
#include<cstdio>
#include<algorithm>
using namespace std;
long long y[133][13], m1, d1, y1, m2, d2, y2;
void init(){
    for(int i=0;i<132;i++){
        y[i][0]+=y[i][1]=i%11?1:2;
        for(int j=2;j<=i%12+1;j++) y[i][0]+=y[i][j]=j*j*j;
        y[132][0]+=y[i][0];    
    }
}
inline void gao(){swap(y1,y2); swap(d1,d2); swap(m1,m2);}
int main(){
    init();
    while(3==scanf("%d%*c%d%*c%d",&m1,&d1,&y1)){
        scanf("%d%*c%d%*c%d",&m2,&d2,&y2);
        if(y1>y2) gao();
        else if(y1==y2){
            if(m1>m2) gao();
            else if(m1==m2 && d1>d2) gao();   
        }
        long long day=0;
        day+=(y2-y1)/132*y[132][0];
        for(int i=0;i<(y2-y1)%132;i++) day+=y[(y1+i)%132][0];
        for(int i=1;i<m1;i++) day-=y[y1%132][i]; day-=d1;
        for(int i=1;i<m2;i++) day+=y[y2%132][i]; day+=d2;
        printf("%lld\n",day+1);
    }   
    return 0;    
}

}}}

by yuxingdubai

做法:

这道题是很简单的日历题.. 只要认真看清楚题目就没什么问题.
在做的时候开一个133*13的数组y[133][13]记录以下数据:
y[i][j]表示年份整除132(132年一个循环)模是i, 第j个月的天数, i!=132 && j!=0;
y[i][0]则表示年份year整除132(132年一个循环)模是i的整年共有多少天;
y[132][0]表示一个完整的循环132年共有多少天.
最后注意:
1. 天数包括头尾两天, 所以是时间间隔+1;
2. 后面的天数可能比前面的小;
3. 输出会超int, 所以要用long long. (我就是这里错了..555)

代码:

#include<cstdio>
#include<algorithm>
using namespace std;
long long y[133][13], m1, d1, y1, m2, d2, y2;
void init(){
    for(int i=0;i<132;i++){
        y[i][0]+=y[i][1]=i%11?1:2;
        for(int j=2;j<=i%12+1;j++) y[i][0]+=y[i][j]=j*j*j;
        y[132][0]+=y[i][0];    
    }
}
inline void gao(){swap(y1,y2); swap(d1,d2); swap(m1,m2);}
int main(){
    init();
    while(3==scanf("%d%*c%d%*c%d",&m1,&d1,&y1)){
        scanf("%d%*c%d%*c%d",&m2,&d2,&y2);
        if(y1>y2) gao();
        else if(y1==y2){
            if(m1>m2) gao();
            else if(m1==m2 && d1>d2) gao();   
        }
        long long day=0;
        day+=(y2-y1)/132*y[132][0];
        for(int i=0;i<(y2-y1)%132;i++) day+=y[(y1+i)%132][0];
        for(int i=1;i<m1;i++) day-=y[y1%132][i]; day-=d1;
        for(int i=1;i<m2;i++) day+=y[y2%132][i]; day+=d2;
        printf("%lld\n",day+1);
    }   
    return 0;    
}