結果
| 問題 |
No.122 傾向と対策:門松列(その3)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-01-09 01:53:06 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 152 ms / 5,000 ms |
| コード長 | 1,154 bytes |
| コンパイル時間 | 1,766 ms |
| コンパイル使用メモリ | 159,992 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-06-13 03:30:26 |
| 合計ジャッジ時間 | 2,744 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 8 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX = 20010;
const ll MOD = 1e9 + 7;
int mini[10], maxi[10];
int perm[10], id[10];
int dp[MAX], dpS[MAX];
int solve(){
bool ok = false;
if(min({perm[1], perm[3], perm[5]}) > max({perm[0], perm[2], perm[4], perm[6]}))
ok = true;
if(max({perm[1], perm[3], perm[5]}) < min({perm[0], perm[2], perm[4], perm[6]}))
ok = true;
if(!ok)
return 0;
for(int i=0;i<7;i++)
id[perm[i]] = i;
memset(dp, 0, sizeof(dp));
for(int i=mini[id[0]];i<=maxi[id[0]];i++)
dp[i] = 1;
for(int i=1;i<7;i++){
int j = id[i];
dpS[0] = 0;
for(int k=1;k<MAX;k++){
dpS[k] = dpS[k-1] + dp[k];
if(dpS[k] >= MOD)dpS[k] -= MOD;
}
memset(dp, 0, sizeof(dp));
for(int k=mini[j];k<=maxi[j];k++){
dp[k] = dpS[k-1];
}
}
int res = 0;
for(int i=1;i<MAX;i++){
res += dp[i];
if(res >= MOD)res -= MOD;
}
return res;
}
int main(){
for(int i=0;i<7;i++)
cin >> mini[i] >> maxi[i];
for(int i=0;i<7;i++)
perm[i] = i;
int res = 0;
do {
res += solve();
if(res >= MOD)res -= MOD;
} while(next_permutation(perm, perm + 7));
cout << res << endl;
return 0;
}