飽き性くんと工場

2 secs 1024 MB
TrueRyoB's icon TrueRyoB

解説

全工程数の総和をMMとします。

タスクを区別しない時、選び方はM!M!通りあります。 ただし、同一タスク内の工程は、配置問わず並び方が一意に制限されるため、表現幅はai!a_i!ずつ失われてしまいます。

なので、M!ai!\frac{M!}{\prod a_i!}mod106+310^6+3が答えとなります。

この数式を一見すると、O(i=1Nai)O(\sum_{i=1}^{N}a_i)もしくは最悪O(1011)O(10^{11})の計算量が必要だと、怯えられるかもしれません。

ただ、modに注目すると、MM106+310^6+3以上のときは、答えは常に00になることが分かります。

これでこの問題を解くことができました。

提出例(C++)