每个人可以扔次面骰子,来获得个数
得分为任意选取个数中的某些数求和所不能得到的最小的正整数
得分大的人获胜
例如扔骰子次得到了 ,那么这个人的得分是
牛妹想知道这回合她是否能赢
牛妹的n个数存在数组a中,牛牛的n个数存在数组b中
数组下标从0开始
如果牛妹能在这回合胜利则输出,否则输出
每个人可以扔次面骰子,来获得个数
得分为任意选取个数中的某些数求和所不能得到的最小的正整数
得分大的人获胜
例如扔骰子次得到了 ,那么这个人的得分是
数组下标从0开始
2,4,[1,2],[1,3]
"Happy"
牛妹能构成 ,牛妹的得分为4
而牛牛只能构成 ,牛牛的得分为2
故牛妹胜利!
/* 排序两数组,从小到大加和,比较两数组第一次出现无法覆盖的数的值即可 */ class Solution { public: string Throwdice(int n, int m, int* a, int aLen, int* b, int bLen) { // write code here long long sum1 = 0, sum2 = 0, res1 = 0, res2 = 0; bool flag1 = 1, flag2 = 1; sort(a, a + n); sort(b, b + n); for(int i = 0; i < n; i++) { if(flag1){ if(a[i] > sum1 + 1) { flag1 = 0; if(sum1 <= sum2) { return "Sad"; } } else { sum1 += a[i]; } } if(flag2){ if(b[i] > sum2 + 1) { flag2 = 0; if(sum2 < sum1) { return "Happy"; } } else { sum2 += b[i]; } } if(flag1 == 0 && flag2 == 0) { break; } } if(sum2 < sum1) { return "Happy"; } else { return "Sad"; } } };
class Solution { public: /** * * @param n int整型 n * @param m int整型 m * @param a int整型一维数组 a * @param aLen int a数组长度 * @param b int整型一维数组 b * @param bLen int b数组长度 * @return string字符串 */ string Throwdice(int n, int m, int* a, int aLen, int* b, int bLen) { long s1=0, s2=0; bool t1=true, t2=true; sort(a, a+n); sort(b, b+n); for(int i=0;i<n && (t1||t2);i++){ if(t1){ if(a[i]<=s1+1) s1 += a[i]; else{ t1 = false; s1 += 1; } } if(t2){ if(b[i]<=s2+1) s2 += b[i]; else{ t2 = false; s2 += 1; } } } return (s1>s2)?"Happy":"Sad"; } };
import java.util.*; public class Solution { /* score2和score1的得到过程完全一致 */ public String Throwdice (int n, int m, int[] a, int[] b) { //实现数组递增排序 int[] arr1 = Arrays.stream(a).sorted().toArray(); int score1 = 0; if(arr1[0] != 1) { score1 = 1; }else { for(int i = 1; i < n; i++) { if(arr1[i] > arr1[i-1] + 1) { int count = arr1[i] - arr1[i-1]; int j = i - 2; while(j >= 0 && count > 0) { if(count >= arr1[j]) { count -= arr1[j]; } j--; } if(count == 0) continue; else { score1 = arr1[i]; } } } } int temp1 = arr1[n-1] + 1; while(score1 == 0) { temp1++; int count = temp1; int j = n-1; while(count > 0 && j >= 0) { if(count >= arr1[j]) { count -= arr1[j]; } j--; } if(count == 0) { continue; }else { score1 = temp1; } } int[] arr2 = Arrays.stream(b).sorted().toArray(); int score2 = 0; if(arr2[0] != 1) { score2 = 1; }else { for(int i = 1; i < n; i++) { if(arr2[i] > arr2[i-1] + 1) { int count = arr2[i] - arr2[i-1]; int j = i - 2; while(j >= 0 && count > 0) { if(count >= arr2[j]) { count -= arr2[j]; } j--; } if(count == 0) continue; else { score2 = arr2[i]; } } } } int temp2 = arr2[n-1] + 1; while(score2 == 0) { temp2++; int count = temp2; int j = n-1; while(count > 0 && j >= 0) { if(count >= arr2[j]) { count -= arr2[j]; } j--; } if(count == 0) { continue; }else { score2 = temp2; } } if(score1 > score2) { return "Happy"; }else { return "Sad"; } } }