当前位置:网站首页>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;
}
边栏推荐
- matplotlib中的3D绘图警告解决:MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure
- MySQL的多表查询(1)
- 华为设备配置BFD与接口联动(触发与BFD联动的接口物理状态变为Down)
- 解决错误:Optional int parameter ‘pageSize‘ is present but cannot be translated into a null value due to
- 并查集总结
- 【多线程】Thread类的基本用法
- Visual Studio中vim模拟器
- 「PHP基础知识」隐式数据类型
- js基础知识整理之 —— 获取元素和命名规范
- 程序员的七夕浪漫时刻
猜你喜欢
基于rt-thread studio的STM32裸机开发——LED
GoLang 使用 goroutine 停止的几种办法
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
基于STM32设计的老人防摔倒报警设备(OneNet)
我们来浅谈代码语言的魅力
Day117.尚医通:生成挂号订单模块
解决错误:Optional int parameter ‘pageSize‘ is present but cannot be translated into a null value due to
别再到处乱放配置文件了!我司使用 7 年的这套解决方案,稳的一秕
Moco of Mock tools use tutorial
vant-swipe adaptive picture height + picture preview
随机推荐
【多线程】Thread类的基本用法
【问题征集】向 iPod 之父、iPhone 联合设计者、Google Nest 创始人 Tony Fadell 提问啦
js基础知识整理之 —— 五种输出方式
中科磁业IPO过会:年营收5.5亿 吴中平家族持股85%
牛客网剑指offer刷题练习之链表中环的入口结点
Servlet——请求(request)与响应(response)
Canonical correlation analysis of CCA calculation process
minio 单机版安装
语音合成模型小抄(1)
【TypeScript笔记】01 - TS初体验 && TS常用类型
有奖提问|《新程序员》专访“Apache之父”Brian Behlendorf
Day117.尚医通:生成挂号订单模块
基于STM32设计的老人防摔倒报警设备(OneNet)
js基础知识整理之 —— 判断语句和三元运算符
程序员常说的“左手锟斤拷,右手烫烫烫”是怎么回事?
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping的区别
Jenkins汉化设置
【mysql知识点整理】--- order by 、group by 出现Using filesort原因详解
停止使用 Storyboards 和 Interface Builder
Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting