ã“ã®å•é¡Œã¯ãƒªã‚¢ã‚¯ãƒ†ã‚£ãƒ–å•é¡Œã§ã™ã€‚ サーãƒãƒ¼å´ã«ç”¨æ„ã•ã‚ŒãŸãƒ—ãƒã‚°ãƒ©ãƒ ã¨å¯¾è©±çš„ã«å¿œç”ã™ã‚‹ã“ã¨ã§æ£ç”ã‚’å°Žãプãƒã‚°ãƒ©ãƒ を作æˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
æ¹–ã«æµ®ã‹ã¶ N 個ã®å°å³¶ã‹ã‚‰ãªã‚‹ãƒ“ワコã¨ã„ã†æ‘ãŒã‚る。 å„å°å³¶ã«ã¯ 0 ã‹ã‚‰ N−1 ã¾ã§ç•ªå·ãŒæŒ¯ã‚‰ã‚Œã¦ã„る。 æ‘ã«ã¯å³¶ã¨å³¶ã®é–“ã«æž¶ã‹ã‚‹æ©‹ãŒ M 本ã‚ã‚Šã€0 ã‹ã‚‰ M−1 ã¾ã§ç•ªå·ãŒæŒ¯ã‚‰ã‚Œã¦ã„る。 æ©‹ã¯åŒæ–¹å‘ã«ç§»å‹•å¯èƒ½ã§ã‚る。 ã“ã“ã§è¨€ã†æ©‹ã¨ã¯å˜ã«å³¶ã¨å³¶ã®é–“ã®é€šã‚Šé“ã¨ã„ã†ã“ã¨ã§ã‚ã‚Šã€å–り除ãã¨äº’ã„ã«åˆ°é”ä¸å¯èƒ½ãªå³¶ã®çµ„ãŒå¢—ãˆã‚‹æ„味ã§ã¯ãªã„。
最近ã€æ©‹ã®ä¸¡ç«¯ã«æŽ²ç¤ºæ¿ã‚’è¨ç½®ã—ã€ãã®æ©‹ã‚’渡ã£ãŸå…ˆã®å³¶ã‹ã‚‰æ©‹ã‚’ 1 本ã ã‘使ã£ã¦ç§»å‹•ã§ãる島 (今ã„る島をå«ã¾ãªã„) ã®ç•ªå·ã®æ›¸ã‹ã‚ŒãŸæœã‚’貼るã“ã¨ã§ã€ スムーズãªç§»å‹•ã‚’実ç¾ã™ã‚‹è¨ˆç”»ãŒæŒã¡ä¸ŠãŒã£ãŸã€‚ 一枚ã®æœã«ã¯ä¸€ã¤ã®ç§»å‹•å…ˆã—ã‹æ›¸ãã“ã¨ãŒå‡ºæ¥ãªã„ãŸã‚ã€ç§»å‹•ã§ãる島ã®æ•°ã ã‘æœãŒå¿…è¦ã«ãªã‚‹ã€‚
ã“ã®æœã®ä½œæˆã‚’命ã˜ã‚‰ã‚ŒãŸã‚ãªãŸã¯ã€æœã¯å…¨éƒ¨ã§ä½•æžšå¿…è¦ã‹ã‚’調ã¹ã‚‹ã“ã¨ã«ã—ãŸã€‚ æ‘ã«ã¯ã€ã‹ã¤ã¦å…¨ã¦ã®æ©‹ã‚’架ã‘ãŸæ©‹è·äººãŒã„る。 ã¾ãŸã€å„島ã«ã¯ãã®å³¶ã«ä½ã‚“ã§ã„ã‚‹æ‘人ãŒã„る。 æ‘ã¯åºƒå¤§ã§å…¨ã¦ã®æŽ²ç¤ºæ¿ã‚’見ã¦å›žã‚‹ã®ã¯éª¨ãŒæŠ˜ã‚Œã‚‹ãŸã‚ã€æœ¬éƒ¨ã‹ã‚‰é›»è©±ã§å½¼ã‚‰ã«è³ªå•ã‚’ã™ã‚‹ã“ã¨ã§å¿…è¦ãªæœã®æžšæ•°ã‚’求ã‚ã‚‹ã“ã¨ã«ã—ãŸã€‚
æ©‹è·äººã¸ã®è³ªå•ã§ã¯ã€ã¾ãšã€ä½•ç•ªã®æ©‹ã®æƒ…å ±ãŒçŸ¥ã‚ŠãŸã„ã‹ã‚’æ©‹è·äººã«ä¼ãˆã‚‹ã€‚ ã™ã‚‹ã¨ã€ã©ã®å³¶ã¨ã©ã®å³¶ã®é–“ã«è©²å½“ã™ã‚‹æ©‹ã‚’架ã‘ãŸã‹ã‚’確実ã«æ•™ãˆã¦ãれる (edgクエリ)。 ä½äººã¸ã®è³ªå•ã§ã¯ã€ã¾ãšèžããŸã„島ã®ç•ªå·iã‚’ä¼ãˆã‚‹ã€‚ ã™ã‚‹ã¨ã€å³¶ i ã«ã‹ã‹ã‚‹æ©‹ã®æ•°ã¨ãã®æ©‹ãŒã©ã“ã«ã‹ã‹ã£ã¦ã„ã‚‹ã‹ã‚’æ•™ãˆã¦ãれる (lst クエリ)。 ã—ã‹ã—ã€è²§å¼±ãªé€šä¿¡ç¶²ã‚’使用ã—ã¦ã„ã‚‹ãŸã‚ã€å„æ©‹ã«å¯¾ã—ã¦ã€80% ã®ç¢ºçŽ‡ã§æƒ…å ±ãŒæŠœã‘è½ã¡ã¦ã—ã¾ã†ã€‚
æœã®ç™ºæ³¨ã¾ã§æ™‚é–“ãŒãªã„ã®ã§å…¨ä½“ã§å¤šãã¦ã‚‚ 3N 回ã—ã‹è³ªå•ãŒã§ããªã„。 以上ã®æ¡ä»¶ã®ã‚‚ã¨ã§ã€å¿…è¦ãªæœã®æ•°ã‚’求ã‚るプãƒã‚°ãƒ©ãƒ を書ããªã•ã„。
以é™ã§ã¯ã€ã‚ãªãŸãŒæ出ã—ãŸãƒ—ãƒã‚°ãƒ©ãƒ を「解ç”ã€ã€ã‚¸ãƒ£ãƒƒã‚¸å´ãŒç”¨æ„ã—ãŸãƒ—ãƒã‚°ãƒ©ãƒ を「ジャッジã€ã¨å‘¼ã¶ã€‚ 入出力ã®è©³ç´°ãªä»•æ§˜ã‚’以下ã«ç¤ºã™ãŒã€å…ˆã«ã‚µãƒ³ãƒ—ルを見るã¨é€Ÿã„。
ジャッジã¯ã€ã¾ãšå³¶ã®æ•° N ã¨æ©‹ã®æ•°ã®åˆè¨ˆ M ã‚’ 1 è¡Œã«å‡ºåŠ›ã™ã‚‹ã€‚
N M
続ã„ã¦ã€è§£ç”㯠edg, lst クエリを最大 3N 回〠ans ã‚’ã¡ã‚‡ã†ã© 1 回ジャッジã«å¯¾ã—ã¦é€ã‚‹ã“ã¨ãŒã§ãる。
解ç”ã® edg クエリã«å¯¾ã—ã€ã‚¸ãƒ£ãƒƒã‚¸ã¯æ©‹iã®ä¸¡ç«¯ã®å³¶ã®ç•ªå·ã‚’ç”ãˆã‚‹ã€‚解ç”ã¯æ¬¡ã®å½¢å¼ã§å‡ºåŠ›ã›ã‚ˆã€‚
edg i
ã“ã‚Œã«å¯¾ã—ã¦ã€ã‚¸ãƒ£ãƒƒã‚¸ã¯æ¬¡ã®å½¢å¼ã§å¿œç”ã™ã‚‹ã€‚
a b
a, b ã¯æ©‹ i ãŒçµã¶å³¶ã®ç•ªå·ã§ã‚る。
解ç”ã® lst クエリã«å¯¾ã—ã€ã‚¸ãƒ£ãƒƒã‚¸ã¯å°å³¶ i ã«ã‹ã‹ã‚‹æ©‹ã®æœ¬æ•°ã¨ã€ãã‚Œãžã‚Œã®æ©‹ã®è¡Œãå…ˆã®å³¶ã®ç•ªå·ã‚’ç”ãˆã‚‹ã€‚解ç”ã¯æ¬¡ã®å½¢å¼ã§å‡ºåŠ›ã›ã‚ˆã€‚
lst i
ã“ã‚Œã«å¯¾ã—ã¦ã€ã‚¸ãƒ£ãƒƒã‚¸ã¯æ¬¡ã®å½¢å¼ã§å¿œç”ã™ã‚‹ã€‚
k v1 v2 v3 … vk
k ã¯å³¶ i ã«ã‹ã‹ã‚‹æ©‹ã®æ•°ã§ã‚る。 続ã v1⋯vk ã¯é ‚点iã‹ã‚‰æ©‹ã‚’一度ã ã‘使ã£ã¦ç§»å‹•å¯èƒ½ãªé ‚点ã®ç•ªå·ã®ãƒªã‚¹ãƒˆã§ã‚る。 å„æ©‹ã®è¡Œãå…ˆ vj ã«å¯¾ã—ã€vj≥0 ã®å ´åˆã¯ãã®æƒ…å ±ãŒã—ã£ã‹ã‚Šä¼ã‚ã£ãŸã“ã¨ã‚’表ã™ã€‚vj=−1 ã®å ´åˆã¯æƒ…å ±ãŒæŠœã‘è½ã¡ã¦ã„ã‚‹ã“ã¨ã‚’表ã™ã€‚ −1 ã‹ã©ã†ã‹ã¯ä¹±æ•°ã§æ±ºã‚られã€80% ã®ç¢ºçŽ‡ã§ −1 ã¨ãªã‚‹ã€‚ã—ãŸãŒã£ã¦ã€åŒã˜ i ã«å¯¾ã—ã¦è¤‡æ•°å›žã“ã®ã‚¯ã‚¨ãƒªã‚’実行ã™ã‚‹ã¨ã€çµæžœã¯å¤‰ã‚ã‚Šã†ã‚‹ã€‚ã¾ãŸã€é †ç•ªã‚‚ä¸å®šã§ã‚る。
解ç”ã® ans クエリã«ã‚ˆã£ã¦ã€ç”ãˆã‚’出力ã§ãる。ã“ã®ã‚¯ã‚¨ãƒªã¯ 1 度ã—ã‹è¡Œã†ã“ã¨ãŒå‡ºæ¥ãšã€çµæžœãŒæ£ã—ããªã„å ´åˆã¯ç›´ã¡ã«èª¤ç”ã¨ãªã‚‹ã€‚ ã“ã®ã‚¯ã‚¨ãƒªã®å®Ÿè¡Œå¾Œã«ã€è§£ç”ã¯ç›´ã¡ã«æ£å¸¸çµ‚了ã›ã‚ˆã€‚ X ã‚’ç”ãˆã¨ã—ã¦å‡ºåŠ›ã—ãŸã„å ´åˆã®å½¢å¼ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã‚る。
ans X
C
#include <stdio.h> int main(){ int n,m; scanf("%d %d", & n, &m); printf("ans 100\n"); // ç”ãˆã‚’ジャッジã«æ出 fflush(stdout); // フラッシュ return 0; }
C++
#include <iostream> using namespace std; int main(){ int n,m; cin >> n >> m; cout << "ans 100" << endl; // 改行直後ã«ãƒ•ãƒ©ãƒƒã‚·ãƒ¥ // cout << "ans 100\n" << flush; // 上ã¨åŒã˜ }
解ç”プãƒã‚°ãƒ©ãƒ ã¨ã‚¸ãƒ£ãƒƒã‚¸ãƒ—ãƒã‚°ãƒ©ãƒ ã®å…¥å‡ºåŠ›ä¾‹ã‚’以下ã«ç¤ºã™ã€‚ å•é¡Œæ–‡ã®å›³ä¸ã®æ‘ã«å¯¾ã™ã‚‹ç”ãˆã‚’求ã‚ã¦ã„る。