結果
| 問題 |
No.122 傾向と対策:門松列(その3)
|
| コンテスト | |
| ユーザー |
yaoshimax
|
| 提出日時 | 2015-03-30 22:27:50 |
| 言語 | PyPy2 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 258 ms / 5,000 ms |
| コード長 | 2,137 bytes |
| コンパイル時間 | 361 ms |
| コンパイル使用メモリ | 77,084 KB |
| 実行使用メモリ | 92,288 KB |
| 最終ジャッジ日時 | 2024-07-03 22:57:52 |
| 合計ジャッジ時間 | 3,345 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 8 |
ソースコード
border=[map(int,raw_input().split()) for i in range(7)]
dp4up= [[0 for i in range(1<<4)]for j in range(20002)]
dp4down= [[0 for i in range(1<<4)]for j in range(20002)]
dp3up= [[0 for i in range(1<<3)]for j in range(20002)]
dp3down= [[0 for i in range(1<<3)]for j in range(20002)]
dp4up[0][0]=1
dp3up[0][0]=1
dp4down[20001][0]=1
dp3down[20001][0]=1
mod=1000000007
for i in range(0,20001):
for mask in range(1<<4):
dp4up[i+1][mask]+=dp4up[i][mask]
for j in range(4):
if (mask&(1<<j)) ==0 :
if border[j*2][0]<=i and i<= border[j*2][1]:
dp4up[i+1][mask+(1<<j)]+=dp4up[i][mask]
dp4up[i+1][mask+(1<<j)]%=mod
for mask in range(1<<3):
dp3up[i+1][mask]+=dp3up[i][mask]
for j in range(3):
if (mask&(1<<j)) ==0 :
if border[j*2+1][0]<=i and i<= border[j*2+1][1]:
dp3up[i+1][mask+(1<<j)]+=dp3up[i][mask]
dp3up[i+1][mask+(1<<j)]%=mod
for i in range(20001,0,-1):
for mask in range(1<<4):
dp4down[i-1][mask]+=dp4down[i][mask]
for j in range(4):
if( (mask&(1<<j)) ==0 ):
if border[j*2][0]<=i and i<= border[j*2][1]:
dp4down[i-1][mask+(1<<j)]+=dp4down[i][mask]
dp4down[i-1][mask+(1<<j)]%=mod
for mask in range(1<<3):
dp3down[i-1][mask]+=dp3down[i][mask]
for j in range(3):
if( (mask&(1<<j)) ==0 ):
if border[j*2+1][0]<=i and i<= border[j*2+1][1]:
dp3down[i-1][mask+(1<<j)]+=dp3down[i][mask]
dp3down[i-1][mask+(1<<j)]%=mod
#for i in range(0,8):
# print i,"up"
# for j in range(1<<4):
# print format(j,'b'),":",dp4up[i][j], ",",
# print
#for i in range(0,8):
# print i,"donw "
# for j in range(1<<4):
# print format(j,'b'),":",dp4down[i][j], ",",
# print
ans=0
for i in range(20001):
ans += (dp3up[i+1][(1<<3)-1]-dp3up[i][(1<<3)-1])*dp4down[i][(1<<4)-1]
ans%=mod
ans += (dp4up[i+1][(1<<4)-1]-dp4up[i][(1<<4)-1])*dp3down[i][(1<<3)-1]
ans%=mod
print ans
yaoshimax