Submission #3027620
Source Code Expand
*> Combination *> 全体でn個の選択から縦(または横)を *> r個選ぶ組み合わせ *> nCr *> = nPr / r! *> = n! / {(n - r)! * r!} *> (W + H)C(W > H ? W : H) *> = (W + H)! / {(W + H - biggerWH)! * biggerWH!} PROGRAM-ID. AGC_025_B. DATA DIVISION. WORKING-STORAGE SECTION. 01 INF EXTERNAL PIC 9(10). *> Fact 01 F1 EXTERNAL. 03 F PIC 9(10) OCCURS 300000 INDEXED BY FIX. 01 V1 EXTERNAL. 03 V PIC 9(10) OCCURS 300000 INDEXED BY VIX. *> Inverse 01 IV1 EXTERNAL. 03 IV PIC 9(10) OCCURS 300000 INDEXED BY IIX MIX. 01 INF2 PIC 9(10). 01 INP PIC X(34). 01 N PIC 9(6). 01 AX PIC 9(6). 01 BX PIC 9(6). 01 K PIC 9(12). 01 a PIC 9(6) BINARY. 01 b PIC 9(6) BINARY. 01 tmp PIC 9(12) BINARY. 01 rm PIC 9(12). 01 dv PIC 9(12). 01 dvx PIC 9(19). 01 i PIC 9(18) BINARY. 01 j PIC 9(18) BINARY. *> N! 01 x PIC 9(10). 01 smalla PIC 9(10) BINARY. 01 biga PIC 9(10) BINARY. 01 smallb PIC 9(10) BINARY. 01 bigb PIC 9(10) BINARY. 01 d_num PIC 9(10). 01 d_ret PIC 9(10). *> inverse a 01 inva PIC 9(10). *> inverse b 01 invb PIC 9(10). *> combination a 01 comba PIC 9(10). *> combination b 01 combb PIC 9(10). 01 m PIC 9(10). 01 sm PIC 9(18). 01 ans PIC X(11). 01 ZS PIC Z(18)9. 01 DUMMY PIC X(1). PROCEDURE DIVISION. ACCEPT INP. UNSTRING INP DELIMITED BY SPACE INTO N AX BX K. *> 外部データ *> 実行単位中の複数のプログラムで使用する定数を設定 CALL "SET_EXTERNAL". SUBTRACT 2 FROM INF GIVING INF2. MOVE N TO d_num. *> 階乗テーブル *> 逆元テーブル CALL "FACT_CALC" USING BY CONTENT d_num BY REFERENCE d_ret. *> (a + b)! MOVE d_ret TO x. MOVE ZERO TO sm. PERFORM VARYING i FROM ZERO BY 1 UNTIL N < i IF ZERO = K ADD 1 TO sm EXIT PERFORM END-IF MOVE i TO a MULTIPLY AX BY a GIVING tmp IF K < tmp EXIT PERFORM END-IF SUBTRACT tmp FROM K GIVING rm DIVIDE BX INTO rm GIVING dv REMAINDER rm IF ZERO = rm AND dv <= N MOVE dv TO b *> a MOVE 1 TO smalla IF ZERO NOT = a MOVE a TO smalla END-IF *> N - a MOVE 1 TO biga IF a NOT = N SUBTRACT a FROM N GIVING tmp MOVE tmp TO biga END-IF *> b MOVE 1 TO smallb IF ZERO NOT = b MOVE b TO smallb END-IF *> N - b MOVE 1 TO bigb IF b NOT = N SUBTRACT b FROM N GIVING tmp MOVE tmp TO bigb END-IF *> 逆元 *> (1 / a!) * (1 / (N - a)!) SET IIX TO smalla SET MIX TO biga MULTIPLY IV(IIX) BY IV(MIX) GIVING dvx DIVIDE INF INTO dvx GIVING dvx REMAINDER inva *> 逆元 *> (1 / b!) * (1 / (N - b)!) SET IIX TO smallb SET MIX TO bigb MULTIPLY IV(IIX) BY IV(MIX) GIVING dvx DIVIDE INF INTO dvx GIVING dvx REMAINDER invb *> combination a MULTIPLY x BY inva GIVING dvx DIVIDE INF INTO dvx GIVING dvx REMAINDER comba *> combination b MULTIPLY x BY invb GIVING dvx DIVIDE INF INTO dvx GIVING dvx REMAINDER combb *> combination a * combination b MULTIPLY comba BY combb GIVING dvx DIVIDE INF INTO dvx GIVING dvx REMAINDER m ADD m TO sm IF INF < sm SUBTRACT INF FROM sm END-IF END-IF END-PERFORM. MOVE sm TO ZS. PERFORM UNANS. DISPLAY ans(1:FUNCTION STORED-CHAR-LENGTH(ans)). STOP RUN. UNANS SECTION. UNSTRING ZS DELIMITED BY ALL SPACE INTO DUMMY ans END-UNSTRING. END PROGRAM AGC_025_B. PROGRAM-ID. SET_EXTERNAL. *> 外部データ *> 実行単位中の複数のプログラムで使用する定数を設定 *> external data *> Set constants used for multiple programs in running unit DATA DIVISION. WORKING-STORAGE SECTION. 01 INF EXTERNAL PIC 9(10). 01 BNY EXTERNAL PIC 9(1). 01 BIT4 EXTERNAL PIC 9(1). 01 BYT4 EXTERNAL PIC 9(1). 01 BYT32 EXTERNAL PIC 9(2). 01 BYT256 EXTERNAL PIC 9(3). 01 HXD EXTERNAL PIC 9(2). 01 NUM_OFF EXTERNAL PIC 9(1). 01 NUM_ON EXTERNAL PIC 9(1). 01 NUM_X EXTERNAL PIC 9(1). 01 OCT EXTERNAL PIC 9(1). PROCEDURE DIVISION. MOVE 998244353 TO INF. MOVE 2 TO BNY. MOVE 4 TO BIT4. MOVE 4 TO BYT4. MOVE 32 TO BYT32. MOVE 256 TO BYT256. MOVE 16 TO HXD. MOVE 0 TO NUM_OFF. MOVE 1 TO NUM_ON. MOVE 9 TO NUM_X. MOVE 8 TO OCT. END PROGRAM SET_EXTERNAL. PROGRAM-ID. FACT_CALC. *> 階乗テーブル F(i) *> 逆元テーブル IV(i) DATA DIVISION. WORKING-STORAGE SECTION. 01 INF EXTERNAL PIC 9(10). *> Factorial 01 F1 EXTERNAL. 03 F PIC 9(10) OCCURS 300000 INDEXED BY FIX. 01 V1 EXTERNAL. 03 V PIC 9(10) OCCURS 300000 INDEXED BY VIX. *> Inverse 01 IV1 EXTERNAL. 03 IV PIC 9(10) OCCURS 300000 INDEXED BY IIX. *> 2 01 BNY EXTERNAL PIC 9(1). 01 VINF PIC 9(10). 01 i PIC 9(10) BINARY. 01 mi PIC 9(10) BINARY. 01 m PIC 9(10) BINARY. 01 tmp PIC 9(19). 01 d PIC 9(19). LINKAGE SECTION. *> (IN) d_num *> (OUT) d_ret 01 d_num PIC 9(10). 01 d_ret PIC 9(10). PROCEDURE DIVISION USING d_num d_ret. MOVE 1 TO i SET FIX TO i MOVE 1 TO F(FIX) SET VIX TO i MOVE 1 TO V(VIX) SET IIX TO i MOVE 1 TO IV(IIX) *> 2 PERFORM VARYING i FROM BNY BY 1 UNTIL d_num < i MULTIPLY i BY F(FIX) GIVING tmp DIVIDE INF INTO tmp GIVING d REMAINDER m SET FIX UP BY 1 MOVE m TO F(FIX) *> INF / i *> INF % i DIVIDE i INTO INF GIVING d REMAINDER m *> V(INF % i) * (INF / i) SET VIX TO m MULTIPLY V(VIX) BY d *> V(INF % i) * (INF / i) % INF DIVIDE INF INTO d GIVING d REMAINDER m *> V(i) = INF - V(INF % i) * (INF / i) % INF SET VIX TO i COMPUTE V(VIX) = INF - m *> IV(i - 1) * V(i) SUBTRACT 1 FROM i GIVING mi SET IIX TO mi MULTIPLY IV(IIX) BY V(VIX) GIVING d *> IV(i - 1) * V(i) % INF DIVIDE INF INTO d GIVING d REMAINDER m *> IV(i) = IV(i - 1) * v(i) % INF SET IIX UP BY 1 COMPUTE IV(IIX) = m END-PERFORM. MOVE F(FIX) TO d_ret. END PROGRAM FACT_CALC.
Submission Info
Submission Time | |
---|---|
Task | B - RGB Coloring |
User | ShinjiSHIBATA |
Language | COBOL - Free (OpenCOBOL 1.1.0) |
Score | 0 |
Code Size | 7420 Byte |
Status | TLE |
Exec Time | 2104 ms |
Memory | 9468 KB |
Judge Result
Set Name | Sample | All | ||||||
---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 0 / 700 | ||||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample01.txt, sample02.txt, sample03.txt |
All | sample01.txt, sample02.txt, sample03.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, sample01.txt, sample02.txt, sample03.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
in01.txt | AC | 1233 ms | 9468 KB |
in02.txt | AC | 1255 ms | 9088 KB |
in03.txt | AC | 1104 ms | 9088 KB |
in04.txt | AC | 1273 ms | 9088 KB |
in05.txt | AC | 1259 ms | 9088 KB |
in06.txt | AC | 1071 ms | 9088 KB |
in07.txt | AC | 1270 ms | 9088 KB |
in08.txt | AC | 385 ms | 4224 KB |
in09.txt | AC | 1229 ms | 8960 KB |
in10.txt | AC | 972 ms | 7424 KB |
in11.txt | AC | 985 ms | 7680 KB |
in12.txt | AC | 428 ms | 4736 KB |
in13.txt | AC | 799 ms | 6656 KB |
in14.txt | AC | 230 ms | 5504 KB |
in15.txt | AC | 376 ms | 4864 KB |
in16.txt | AC | 131 ms | 3072 KB |
in17.txt | AC | 973 ms | 7040 KB |
in18.txt | AC | 1633 ms | 9088 KB |
in19.txt | TLE | 2104 ms | 9088 KB |
in20.txt | TLE | 2104 ms | 9088 KB |
in21.txt | AC | 1 ms | 384 KB |
sample01.txt | AC | 1 ms | 384 KB |
sample02.txt | AC | 1 ms | 384 KB |
sample03.txt | AC | 377 ms | 5888 KB |