二哥想知道在一段時期內,一共有多少個交易日。**交易日的限定如下:
週六、週日不能交易
元旦期間(1月1日)不能交易
五一勞動節期間(5月1日至3日)不能交易
十一國慶節期間(10月1日至7日)不能交易
沒有在上述要求中提到的日期均可交易
第一行有乙個整數n,表示一共有n組資料。
每組資料都有一行,是兩個用空格分開的日期,分別為開始日期和結束日期。日期格式為yyyy-mm-dd(比如2010-11-11);資料保證開始日期不晚於結束日期。
對於所有資料:n
≤365
'>n≤365
對於30%的資料:日期範圍從2010-11-23至2012-12-21
對於70%的資料:日期範圍從1900-01-01至9999-12-31
輸出共n行,每行乙個整數,對應於一組資料。
每組資料需要輸出在指定日期區間內,共有多少個交易日;區間的開始和結束日期也算在內(如果是交易日的話)。
4
2010-11-18 2010-11-20
2010-01-01 2010-01-01
2010-05-01 2010-05-03
2010-10-01 2010-10-07
200
0
#include#includeusing
namespace
std;
int isyeap(int
x)int dayofmonth[13][2]=;
struct
date
if(day>dayofmonth[month][isyeap(year)])}}
};int buf[10001][13][32
];int weekday(int y,int m,int
d)
return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;}
void
init()
}int
main()
else
}return0;
}
這是我的**,覺得沒有錯,資料也是對的,但提交就是runtime error,很迷。
附上ac的**:
#include #includeusing
namespace
std;
int dayofmonth[13]=,};
struct
date
intweek()
int w=(d+m*2+3*(m+1)/5+y+y/4-y/100+y/400)%7
;
return w+1
; }
date(){}
date(
int yy,int mm,int dd)
date getnext()
else
return
t;
} bool
dealday()
bool
isweekend()
};
bool
equals(date d1,date d2)
int ansofyear(int
year)
else
t2=11
;
if(date(year,1,1
).isweekend())
t3+=1
;
for(i=1;i<4;i++)
if(date(year,5
,i).isweekend())
t3+=1
;
for(i=1;i<8;i++)
if(date(year,10
,i).isweekend())
t3+=1
; res=res-t1-t2+t3;
return
res;
} intmain()
else
printf(
"%d\n
",res);
} return
0;
}
1008 二哥買期貨
對起始年份和結束年份,可以對每一天單獨判斷 對中間的每個整年,週末總的天數分為兩部分 1.每個整年恰有完整的52個周,所以至少有 2 52 天是週末 2.閏年時,366 7 2,需要判斷12 31和12 30是否為週末即可,平年需要判斷12 31是否為週末 對中間的每個整年,都有11天假日,注意週末...
交大oj 1008 二哥買期貨 C 總結
這個公式可以根據日期計算這一天是星期幾,具體公式如下 w d 2 m 3 m 1 5 y y 4 y 100 y 400 mod 7 這個函式返回的結果是0 6的整數,表示星期一到星期天 int getweeknumber int year,int month,int day return day ...
1037 二哥買草
二哥在網上買乾草。他發現了一筆特殊的買賣。他每買一捆大小為a 1 a 1,000,000 的乾草,他就能免費獲得一捆大小為b 1 b a 的乾草,也就是說免費的那個必須大小是小於購買的那個。然而,這筆交易是有規定的 大的一捆乾草必須是高質量的,小的一捆是低質量的。二哥是個吝嗇鬼,他並不在意 隨便什麼...