大ãã• N ã®é †åˆ—ã¨ã¯ï¼Œæ•°åˆ— (1, 2, 3, …, N) ã®å„è¦ç´ を並ã¹æ›¿ãˆãŸã‚‚ã®ã§ã‚る. 例ãˆã° (5, 2, 1, 4, 3) ã¯å¤§ãã• 5 ã®é †åˆ—ã ãŒï¼Œä¸€æ–¹ã§ (1, 5, 1, 2, 3) ã¯ãã†ã§ã¯ãªã„.
ã“ã®å•é¡Œã¯ãƒªã‚¢ã‚¯ãƒ†ã‚£ãƒ–æ–¹å¼ã®ã‚¿ã‚¹ã‚¯ã§ã‚る.ã‚ãªãŸã¯å¿œç”プãƒã‚°ãƒ©ãƒ ã¨ã€Œé †åˆ—当ã¦ã‚²ãƒ¼ãƒ ã€ã‚’è¡Œã†ï¼Ž ã¾ãšæœ€åˆã«ï¼Œå¿œç”プãƒã‚°ãƒ©ãƒ ã¯é †åˆ— σを1ã¤å†…部ã§æ±ºã‚る. 次ã«ï¼Œã‚ãªãŸã«ã¯ã“ã®é †åˆ—ã®å¤§ãã• N ãŒä¼ãˆã‚‰ã‚Œã‚‹ï¼Ž ã“ã®å¾Œï¼Œã‚ãªãŸã¯å¿œç”プãƒã‚°ãƒ©ãƒ ã«ä½•å›žã‹è³ªå•ã‚’ã™ã‚‹ï¼Ž ãã—ã¦ï¼Œå¿œç”プãƒã‚°ãƒ©ãƒ ã®æŒã£ã¦ã„ã‚‹é †åˆ—ã‚’ç‰¹å®šã™ã‚‹ã“ã¨ãŒã‚ãªãŸã®ç›®çš„ã§ã‚る.
質å•ã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ã§ã‚る: 大ãã• N ã®é †åˆ— Ï„ ã‚’1ã¤æ±ºã‚,ãれを応ç”プãƒã‚°ãƒ©ãƒ ã«èžãã¨ï¼Œ å¿œç”プãƒã‚°ãƒ©ãƒ ã¯æ•°åˆ— ai = (σ上ã§ã®æ•°å— i ã®ä½ç½®ã¨ Ï„ 上ã§ã®æ•°å— i ã®ä½ç½®ã®è·é›¢)を計算ã™ã‚‹ï¼Ž ãã®å¾Œï¼Œæ•°åˆ— (a1, a2, a3, …, aN) ã‚’æ˜‡é †ã«ä¸¦ã¹ã¦åˆ— (b1, b2, b3, …, bN) を作り,ã‚ãªãŸã®ãƒ—ãƒã‚°ãƒ©ãƒ ã«å‡ºåŠ›ã™ã‚‹ï¼Ž
例ãˆã°ï¼ŒÏƒ = (5, 2, 1, 4, 3) ã®ã¨ã,τ = (2, 3, 1, 4, 5) ã‚’èžãã¨ï¼Œ å¿œç”プãƒã‚°ãƒ©ãƒ ã¯å†…部㧠(a1, a2, a3, a4, a5) = (0, 1, 3, 0, 4) を計算ã—, ã“れをソートã—ãŸåˆ— (b1, b2, b3, b4, b5) = (0, 0, 1, 3, 4) を出力ã™ã‚‹ï¼Ž
ã§ãã‚‹ã ã‘å°‘ãªã„質å•å›žæ•°ã§é †åˆ—を特定ã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ を記ã›ï¼Ž 採点方法ã«ã¤ã„ã¦ã¯ã€ŒæŽ¡ç‚¹æ–¹å¼ã€ã®é …ã§è¨˜ã™ï¼Ž
ã¾ãšï¼Œé †åˆ—ã®å¤§ãã• N ãŒå…¥åŠ›ã¨ã—ã¦ä¸Žãˆã‚‰ã‚Œã‚‹ï¼Ž
N
続ã„ã¦ï¼Œã‚ãªãŸã®ãƒ—ãƒã‚°ãƒ©ãƒ ã¯ä½•å›žã‹å¿œç”プãƒã‚°ãƒ©ãƒ ã«è³ªå•ã‚’ã™ã‚‹ï¼Žè³ªå•ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã¯ä»¥ä¸‹ã§ã‚ã‚‹ã¨ã™ã‚‹ï¼Ž
? τ1 τ2 τ3 … τN
Ï„i ã¯ï¼Œè³ªå•ã™ã‚‹é †åˆ—ã® i 番目ã®è¦ç´ ã®å€¤ã§ã‚る. ã“ã®ã¨ã (Ï„1, …, Ï„N) ã¯å¤§ãã• N ã®é †åˆ—ã«ãªã£ã¦ã„ãªã‘ã‚Œã°ãªã‚‰ãªã„. ã™ãªã‚ã¡ï¼ŒÏ„i ã®å€¤ã¯ 1 以上 N 以下ã§ã™ã¹ã¦ç›¸ç•°ãªã£ã¦ã„ãªã‘ã‚Œã°ãªã‚‰ãªã„. ã“ã®å¾Œï¼Œå¿œç”プãƒã‚°ãƒ©ãƒ ã¯è³ªå•ã«å¯¾ã™ã‚‹ç”ãˆã‚’出力ã™ã‚‹ï¼Ž
b1 b2 b3 … bN
ã“ã®ã‚„ã‚Šã¨ã‚Šã‚’コード上ã§å®Ÿè£…ã™ã‚‹å ´åˆï¼ŒC++ã§ã¯ä¾‹ãˆã°æ¬¡ã®ã‚ˆã†ã«ãªã‚‹ï¼Ž 例ãˆã°é †åˆ— (5, 2, 1, 4, 3) を質å•ã—ãŸã„å ´åˆã«ã¯ï¼Œä¾‹ãˆã°
int tau[5] = {5, 2, 1, 4, 3}; printf("?"); for (int i=0; i<5; ++i) printf(" %d", tau[i]); printf("\n"); fflush(stdout);
ã®ã‚ˆã†ã«ã™ã‚‹ï¼Žæ¬¡ã«
for (int i=0; i<5; ++i) scanf("%d", &b[i]);
ã¨ã™ã‚‹ã¨ï¼Œé…列 b ã«è³ªå•ã®ç”ãˆãŒè¿”ã£ã¦ãる.
何回ã‹è³ªå•ã‚’è¡Œã£ãŸå¾Œï¼Œã‚ãªãŸã¯å¿œç”プãƒã‚°ãƒ©ãƒ ã®æŒã¤é †åˆ— σ を特定ã™ã‚‹ï¼Žãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã¯ä»¥ä¸‹ã®é€šã‚Šã¨ã™ã‚‹ï¼Ž
(質å•ã®ã¨ãã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã¨ã»ã¼åŒã˜ã§ï¼Œå…ˆé ã® ?
㌠!
ã«ãªã£ã¦ã„ã‚‹ã“ã¨ã«æ³¨æ„ã›ã‚ˆï¼Ž)
! τ1 τ2 τ3 … τN
é †åˆ—ã®ç‰¹å®šã‚’è¡Œã£ãŸå¾Œï¼Œã‚ãªãŸã®ãƒ—ãƒã‚°ãƒ©ãƒ ã¯ç›´ã¡ã«çµ‚了ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„.終了ã—ãªã‹ã£ãŸå ´åˆã®ã‚¸ãƒ£ãƒƒã‚¸çµæžœã¯ä¸å®šã¨ã™ã‚‹ï¼Ž
ã“ã®å•é¡Œã§ã¯ãƒ†ã‚¹ãƒˆãƒ‡ãƒ¼ã‚¿ã”ã¨ã«è³ªå•å›žæ•°ã®ä¸Šé™å€¤ãŒè¨å®šã•ã‚Œã¦ãŠã‚Šï¼Œãƒ—ãƒã‚°ãƒ©ãƒ ã®è¡Œã£ãŸè³ªå•ã®å›žæ•°ãŒãã®ä¸Šé™å€¤ã‚’上回るã¨èª¤ç”ã¨åˆ¤å®šã•ã‚Œã‚‹ï¼Ž
プãƒã‚°ãƒ©ãƒ ã®å‡ºåŠ› | プãƒã‚°ãƒ©ãƒ ã¸ã®å…¥åŠ› |
---|---|
5 | |
? 2 3 1 4 5 | |
0 0 1 3 4 | |
? 1 2 3 4 5 | |
0 0 2 2 4 | |
? 5 4 3 2 1 | |
0 2 2 2 2 | |
? 5 2 1 4 3 | |
0 0 0 0 0 | |
! 5 2 1 4 3 |
σ = (5, 2, 1, 4, 3) ã§ã‚る.何度ã‹è³ªå•ã‚’è¡Œã£ãŸå¾Œã«åˆ—を特定ã—ã¦ã„る.
プãƒã‚°ãƒ©ãƒ ã®å‡ºåŠ› | プãƒã‚°ãƒ©ãƒ ã¸ã®å…¥åŠ› |
---|---|
1 | |
! 1 |
大ãã• 1 ã®é †åˆ—㯠1 ã¤ã—ã‹ãªã„ã®ã§è³ªå•ã‚’ã—ãªãã¦ã‚‚ç›´ã¡ã«ç‰¹å®šã™ã‚‹ã“ã¨ãŒã§ãる.