2014-09-04 33 views
-5

分发奖牌这是奖牌颁发仪式。 10^6名警察,编号从1到10^6,排成一列。有N (1<=N<=1000)奖牌分布的迭代。在迭代i(0 < = i < N), count[i] (1 < = count[i] < = 100)奖牌给所有人员从from[i] to to[i] (1 < = from[i] < = to[i] < = 10^6)在爪哇分发奖牌解决方案

如果我们总结一下收到副驾驶开始的奖牌数量,会是谁使累积总和超过给定的金牌count THRESHOLD (1 < = THRESHOLD < = 10^9)副驾驶?

输入/输出规格输入格式:

您将得到5个输入:

  1. INPUT1 = N,迭代的次数
  2. 输入2 =计数,奖牌数的在每次迭代中阵列
  3. input3 = from,每次迭代中的起始索引数组
  4. input4 = to,每次迭代结束索引数组
  5. 输入5 =阈值时,游戏币计数阈值

输出格式:

的整数,表示第一官的数量,使得徽章从副驾驶开始的累积和高达该官超过THRESHOLD 。如果这样的官员不存在,输出应该是-1。

+1

你需要开始用你的算法,并提出一些代码。如果这不起作用,请在此处寻求帮助。 – ErstwhileIII 2014-09-04 19:02:07

+0

其实我不明白究竟是什么问题..我基本上必须做什么 – 2014-09-06 15:14:33

回答

0

它在C#语言文字工作

public static int DistributingMedals(int input1, int[] input2, int[] input3, int[] input4, int input5) 
{ 
    int officerIndex = -1; 
    if (InputsValid(input1, input2, input3, input4, input5)) 
    { 
     int medalsCount = 0; 
     for (int i = 0; i < input1; i++) 
     { 
      for (int o = input3[i]; o <= input4[i]; o++) 
      { 
       medalsCount += input2[i]; 
       if (medalsCount > input5) 
       { 
        officerIndex = o; 
        break; 
       } 
      } 
      if (medalsCount > input5) 
       break; 
     } 
    } 
    return officerIndex; 
} 

private static bool InputsValid(int input1, int[] input2, int[] input3, int[] input4, int input5) 
{ 
    if (((1 <= input1) && (input1 <= 1000)) 
     && ((input2.Length == input1) && (input3.Length == input1) && (input4.Length == input1)) 
     && ((1 <= input5) && (input5 <= 1000000000))) 
    { 
     int ok = 0; 
     for (int i = 0; i < input1; i++) 
     { 
      if ((1 <= input3[i] && input3[i] <= input4[i] && input4[i] <= 1000000) 
       && (1 <= input2[i] && input2[i] <= 100)) 
       ok++; 
     } 
     if (ok == input1) 
      return true; 
    } 
    return false; 
} 
+0

非常感谢!其工作 – 2014-09-10 06:49:22

+0

你欢迎。然后单击**答案按钮** – mansoor 2014-09-10 07:04:48

+0

它不通过所有测试用例,只有一个测试用例通过。 – 2014-09-11 07:24:25

0
In Java# 
----------------------- 

public class CandidateCode 
{ 
    public static void main(String[] args) { 
     int answer = DistributingMedals(1,new int[]{1},new int[]{1},new int[]{10},2); 
     System.out.println(answer); 
    } 

    /** 
    * 
    * @param input1 = N, the number of iterations 
    * @param input2 = count, the array of medal counts in each iteration 
    * @param input3 = from, the array of starting indices in each iteration 
    * @param input4 = to, the array of ending indices in each iteration 
    * @param input5 = THRESHOLD, the medal count threshold 

    * @return 
    */ 

    public static int DistributingMedals(int input1,int[] input2,int[] input3,int[] input4,int input5) 
    { 

     int officerIndex = -1; 
     if (InputsValid(input1, input2, input3, input4, input5)) 
     { 
      int medalsCount = 0; 
      for (int i = 0; i < input1; i++) 
      { 
       for (int o = input3[i]; o <= input4[i]; o++) 
       { 
        medalsCount += input2[i]; 
        if (medalsCount > input5) 
        { 
         officerIndex = o; 
         break; 
        } 
       } 
       if (medalsCount > input5) 
        break; 
      } 
     } 
     return officerIndex; 

    } 


    private static boolean InputsValid(int input1, int[] input2, int[] input3, int[] input4, int input5) 
    { 
     if (((1 <= input1) && (input1 <= 1000)) 
      && ((input2.length == input1) && (input3.length == input1) && (input4.length == input1)) 
      && ((1 <= input5) && (input5 <= 1000000000))) 
     { 
      int ok = 0; 
      for (int i = 0; i < input1; i++) 
      { 
       if ((1 <= input3[i] && input3[i] <= input4[i] && input4[i] <= 1000000) 
        && (1 <= input2[i] && input2[i] <= 100)) 
        ok++; 
      } 
      if (ok == input1) 
       return true; 
     } 
     return false; 
    } 
}