当前位置:网站首页>1686. 石子游戏 VI
1686. 石子游戏 VI
2022-08-02 23:56:00 【Mr Gao】
1686. 石子游戏 VI
Alice 和 Bob 轮流玩一个游戏,Alice 先手。
一堆石子里总共有 n 个石子,轮到某个玩家时,他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准 。双方都知道对方的评判标准。
给你两个长度为 n 的整数数组 aliceValues 和 bobValues 。aliceValues[i] 和 bobValues[i] 分别表示 Alice 和 Bob 认为第 i 个石子的价值。
所有石子都被取完后,得分较高的人为胜者。如果两个玩家得分相同,那么为平局。两位玩家都会采用 最优策略 进行游戏。
请你推断游戏的结果,用如下的方式表示:
如果 Alice 赢,返回 1 。
如果 Bob 赢,返回 -1 。
如果游戏平局,返回 0 。
示例 1:
输入:aliceValues = [1,3], bobValues = [2,1]
输出:1
解释:
如果 Alice 拿石子 1 (下标从 0开始),那么 Alice 可以得到 3 分。
Bob 只能选择石子 0 ,得到 2 分。
Alice 获胜。
示例 2:
输入:aliceValues = [1,2], bobValues = [3,1]
输出:0
解释:
Alice 拿石子 0 , Bob 拿石子 1 ,他们得分都为 1 分。
打平。
示例 3:
输入:aliceValues = [2,4,3], bobValues = [1,6,7]
输出:-1
解释:
不管 Alice 怎么操作,Bob 都可以得到比 Alice 更高的得分。
比方说,Alice 拿石子 1 ,Bob 拿石子 2 , Alice 拿石子 0 ,Alice 会得到 6 分而 Bob 得分为 7 分。
Bob 会获胜。
解代码如下所示:
void quick_sort(int *a,int low,int high,int *b,int *c){
if(low<high){
int l=low,h=high;
int p=a[low],pb=b[low],pc=c[low];
while(low<high){
while(low<high&&a[high]<=p){
high--;
}
a[low]=a[high];
b[low]=b[high];
c[low]=c[high];
while(low<high&&a[low]>=p){
low++;
}
a[high]=a[low];
b[high]=b[low];
c[high]=c[low];
}
a[low]=p;
b[low]=pb;
c[low]=pc;
quick_sort(a,l,low-1,b,c);
quick_sort(a,low+1,h,b,c);
}
}
int stoneGameVI(int* aliceValues, int aliceValuesSize, int* bobValues, int bobValuesSize){
int *rank=(int *)malloc(sizeof(int)*aliceValuesSize);
for(int i=0;i<aliceValuesSize;i++){
rank[i]=aliceValues[i]+bobValues[i];
}
quick_sort(rank,0,aliceValuesSize-1, aliceValues,bobValues);
int asum=0,bsum=0;
for(int i=0;i<aliceValuesSize;i++){
if(i%2==0){
int max=aliceValues[i];
int j=i+1;
int index=i;
if(j==aliceValuesSize){
asum=asum+aliceValues[i];;
break;
}
while(rank[j]==rank[i]&&j!=aliceValuesSize){
if(aliceValues[j]>max){
max=aliceValues[j];
index=j;
}
j++;
if(j==aliceValuesSize){
break;}
}
int t=aliceValues[index];
aliceValues[index]=aliceValues[i];
aliceValues[i]=t;
t=bobValues[index];
bobValues[index]=bobValues[i];
bobValues[i]=t;
asum=asum+aliceValues[i];
}
else{
int max=bobValues[i];
int j=i+1;
int index=i;
if(j==aliceValuesSize){
bsum=bsum+bobValues[i];;
break;
}
while(rank[j]==rank[i]&&j!=aliceValuesSize){
if(bobValues[j]>max){
max=bobValues[j];
index=j;
}
j++;
if(j==aliceValuesSize){
break;}
}
int t=aliceValues[index];
aliceValues[index]=aliceValues[i];
aliceValues[i]=t;
t=bobValues[index];
bobValues[index]=bobValues[i];
bobValues[i]=t;
bsum=bsum+bobValues[i];
}
}
printf("%d %d ",asum,bsum);
if(asum>bsum){
return 1;
}
if(asum<bsum){
return -1;
}
return 0;
}
边栏推荐
- 十年架构五年生活-04第一个工作转折点
- 秒懂网络拓扑中的下一跳地址
- Servlet——请求(request)与响应(response)
- random.nextint()详解
- 新公链时代的跨链安全性解决方案
- UE5 官方案例Lyra 全特性详解 8.如何用配置表初始化角色数据
- Last Common Ancestor (LCA) Study Notes | P3379 【Template】Least Common Ancestor (LCA) Problem Solution
- matplotlib中的3D绘图警告解决:MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure
- 关于地图GIS开发事项的一次实践整理(上)
- flutter 时间戳转日期
猜你喜欢
随机推荐
js显示隐藏手机号
如何正确地配置入口文件?
【Autosar RTM】
Understand the next hop address in the network topology in seconds
UE5 官方案例Lyra 全特性详解 8.如何用配置表初始化角色数据
pytest-常用运行参数
Introduction to resubmit Progressive Anti-Duplicate Submission Framework
服务间歇性停顿问题优化|得物技术
Day117. Shangyitong: Generate registered order module
Speech Synthesis Model Cheat Sheet (1)
Let's talk about the charm of code language
6、Powershell命令配置Citrix PVS云桌面桌面注销不关机
我们来浅谈代码语言的魅力
5、Citrix云桌面初始化Storefront设置
【问题征集】向 iPod 之父、iPhone 联合设计者、Google Nest 创始人 Tony Fadell 提问啦
js基础知识整理之 —— 获取元素和命名规范
并查集总结
NLP常用Backbone模型小抄(1)
Pytest配置项-pytest.ini
华为设备配置BFD与接口联动(触发与BFD联动的接口物理状态变为Down)