我正在InterviewStreet解决挑战“鲜花”:
你和你的K-1朋友想买N朵花。花号我有 主持人ci。不幸的是卖家不喜欢顾客买 很多花,所以他试图改变花的价格 以前买过鲜花的顾客。更确切地说,如果是客户 已经买了x花,他应该支付(x + 1)* ci美元购买 花号i。
你和你的K-1朋友想以这样的方式购买所有的N花 你花的钱尽可能少。
但我的解决方案是测试用例失败:3,5和7 所以我得到了7/10的分数。
我已经彻底测试了我的代码,并且它一直给我正确的答案,所以我不明白为什么我没有得到这个挑战的满分。
基本上我所做的是,如果有比花更多或相同的朋友购买,我将返回花的价格总和。
如果有更多的鲜花比朋友买,那么我会按照后代的顺序对花的价格进行分类(更便宜更便宜),并让朋友一次购买一个。
typedef unsigned long long int uint64;
uiRemainder = n % k;
sort(viFlowersCost.begin(), viFlowersCost.end(), greater<int>()); //Sorted Array Descending
if(uiRemainder == 0) {
for(a = 0; a < n; a+=k) {
for(b = 0; b < k; ++b) {
ui64Result += (x+1)*viFlowersCost[a+b];
}
++x;
}
} else {
for(a = 0; a < (n/k)*k; a+=k) {
for(b = 0; b < k; ++b) {
ui64Result += (x+1)*viFlowersCost[a+b];
}
++x;
}
for(b = 0; b <= uiRemainder; ++b) {
ui64Result += (x+1)*viFlowersCost[a+b];
}
}
cout<<ui64Result;
我的问题是:考虑到以下限制,哪些输入会使我的程序抛出错误的答案:
约束:
1 <= N,K <= 100
每朵花的成本不超过1,000,000
我已经针对极端情况进行了测试:
N = 99 K = 100,随后是100朵花,价格在900,000-1,000,000之间 它仍然给了我正确的答案。
例如以下测试用例:
99 100
916807 972425 933847 933809 997490 906570 926534 936300 963336 917637 956205 927011 966648 942300 906839 911128 967915 931564 970607 941177 935338 918421 905061 977177 911389 959618 991125 966236 942883 980278 979549 991459 907876 928248 908003 970585 967394 962906 915297 950976 906662 989573 985875 903158 911494 990185 911664 975093 934338 976986 918541 910894 911602 952041 907953 967915 977677 982920 990006 959603 908295 943832 917462 911173 976614 996246 935262 945460 987876 973350 949546 930732 922685 988390 912489 979841 918856 953461 923072 985130 906338 917402 975289 931717 927872 920676 914295 994827 997989 975217 977181 914545 991968 935860 994059 913399 927867 912266 948655 944224
我的节目输出:
93697342
根据采访街道,这是正确的答案