このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
TopCoder Security Agency(TSA、本日設立された)は今新しい暗号化システムを開発した。この暗号化システムは暗号化する数字の列を入力として受け取る。あなたはTSAで働いており、仕事は暗号化プロセスの重要な部分を実装することである。入力のなかから1つの数字を取り出し、その値を1増やすことが認められている。これはリスト中のすべての数字の積ができるだけ大きくなるように行われなければならない。numbers[]という数字の列が与えられたとき、得られる積の最大値を返せ。ただし、返される値は2^62を超えないことは保証されているものとする。
import java.util.Arrays; public class Cryptography { public long encrypt(int[] numbers) { Arrays.sort(numbers); long n = numbers[0] + 1; for( int i=1 ; i<numbers.length ; i++ ){ n *= numbers[i]; } return n; } }
得点は247.04/250、1回のsubmitでシステムテストクリア。積を最大化するということは、最小値を見つけてそれに1を加えればよいということに気づけばOK。
0 件のコメント:
コメントを投稿