ICPC World Finals 4日目
æš—ã„åµã®å¤œã ã£ãŸã€‚ 夢ã®ä¸ã§ãƒ†ã‚£ãƒ¼æ°ã¯ã‚¿ã‚¤ãƒ スリップã—ã¦ã„ãŸã€‚ ICPCã®ä¼šå ´ã®ã‚ˆã†ã ãŒä½•ã‹ãŠã‹ã—ã„…。 ã‚‚ã—や…ã“ã‚Œã¯ã€Nå¹´å‰ï¼ˆNã¯è‡ªç„¶æ•°ï¼‰ã®ICPCãªã®ã‹â€¦? æ··ä¹±ã®å†…ã«ç«¶æŠ€ã¯é–‹å§‹ã—ã¦ã—ã¾ã£ãŸã€‚ ã ãŒæ…Œã¦ã‚‹å¿…è¦ã¯ãªã„。 ãã£ã¨å•é¡Œã‚‚ç°¡å˜ã«é•ã„ãªã„。 例ãˆã°ã“ã‚Œãªã©ã¯ã‚½ãƒ¼ãƒˆã™ã‚‹ã ã‘ã§è§£ã‘ã¦ã—ã¾ã†ã¯ãšã§ã¯ãªã„ã‹ã€‚ 冷é™ã«ã‚³ãƒ¼ãƒ‰ã‚’書ã上ã’ã€é€Ÿã‚„ã‹ã«Submit。
ã—ã‹ã—ãã®çµæžœã¯â€¦Memory Limit Exceeded…?!
C++言語ã«ã¤ã„ã¦ã¯ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰
long long int a[n]; unsigned long long int x = x0; for (int i = 0; i < n; i++) { a[i]=(long long int)x; x ^= x << 13; x ^= x >> 7; x ^= x << 17; }
Java言語ã«ã¤ã„ã¦ã¯ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰
long[] a = new long[n]; long x = x0; for(int i = 0; i < n; i++){ a[i] = x; x ^= x << 13; x ^= x >>> 7; x ^= x << 17; }
ã§ä¸Žãˆã‚‰ã‚Œã‚‹æ“¬ä¼¼ä¹±æ•°åˆ—a[0],a[1],⋯,a[n−1]ã‚’æ˜‡é †ã«ã‚½ãƒ¼ãƒˆã™ã‚‹ã€‚ k番目ã®æ•°ï¼ˆa[k−1])をç”ãˆã‚ˆã€‚
n k x0
1行目㫠擬似乱数列ã®é•·ã•n〠求ã‚るインデックスk〠コードä¸ã®åˆæœŸå€¤x0 ãŒç©ºç™½åŒºåˆ‡ã‚Šã§ä¸Žãˆã‚‰ã‚Œã‚‹ã€‚
å•é¡Œæ–‡ã«ã¦å®šç¾©ã•ã‚ŒãŸæ“¬ä¼¼ä¹±æ•°åˆ—ã«ãŠã„ã¦k番目ã«å°ã•ã„æ•°ã‚’1è¡Œã«å‡ºåŠ›ã›ã‚ˆã€‚
20 10 1
-768720241707614171
ã“ã®å…¥åŠ›ã«ãŠã„ã¦ç”Ÿæˆã•ã‚Œã‚‹æ•°åˆ—ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã‚る。
1 1082269761 1152992998833853505 -7269227409276787159 -768720241707614171 -8787613929710185883 -670945072575735807 -6753709453369041295 -4166779903597258483 9024654201992055039 8332670729032836398 2074683623940568804 -1176172910426220663 5632491372296299238 -8006175397324373085 -8536891001451786268 -3486562341448986757 1956468987595729445 -6260278484400246991 1076885984028793263
1000000 100 2
-9221458681145860019
100000000 10000000 3
-7379326796154077070