鱼C论坛

 找回密码
 立即注册
查看: 1140|回复: 17

[已解决]求解此题

[复制链接]
发表于 2023-8-1 19:04:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 香蕉那个不拿拿 于 2023-8-1 19:21 编辑

https://xjoi.net/problem/1176 捕获.PNG 捕获1.PNG 捕获2.PNG 捕获3.PNG
最佳答案
2023-8-1 19:57:10
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,r;
    cin >>a>>b>>r;
    if(a<2*r||b<2*r){
        cout <<"Bob win";
    }
    else cout<<"Alice win";
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-1 19:05:49 | 显示全部楼层
Snipaste_2023-08-01_19-05-37.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 19:06:06 | 显示全部楼层
进不去,显示一个彩虹猫
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 19:06:45 | 显示全部楼层
稍等片刻,快马加鞭解题中。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 19:11:38 | 显示全部楼层
你还是把题目放出来吧,我们可能因为级别不够看不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-1 19:22:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-1 19:22:52 | 显示全部楼层
Mike_python小 发表于 2023-8-1 19:06
进不去,显示一个彩虹猫

已放出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-1 19:23:24 | 显示全部楼层
isdkz 发表于 2023-8-1 19:06
稍等片刻,快马加鞭解题中。。。

已放出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 19:47:03 | 显示全部楼层

复制成文本给我OK?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 19:50:15 | 显示全部楼层
题目要求判断在一张长为a,宽为b的纸上放圆形片的游戏中,先手放纸片的人是否一定能赢。已放好的纸片不能挪动位置,且新放的纸片不能相交但可以外切已放纸片的边界,如果新放不了纸片则算输。

思路:
根据游戏规则,我们可以观察到以下几个情况:

如果r >= min(a, b)/2,即圆形片的半径大于等于纸的最小边长的一半,那么无论先手怎么放纸片,后手都可以把剩下的空间填满,因此先手必输。
如果r * sqrt(2) > min(a, b),即圆形片的直径大于纸的最小边长,那么新放的纸片一定无法外切已放纸片的边界,因此无法进行有效放置,先手必输。
对于其他情况,先手可以先放一个圆心位于纸的中心,半径为r的圆形片。这个圆形片的直径小于等于纸的最小边长,后手无法放置圆形片。接下来,无论后手怎么放纸片,先手总可以对称地放置一个与后手放置的圆形片相对应的圆形片,保持对称,并且不会相交,直到纸的所有空间都被填满。因此,先手必胜。
根据上述分析,可以得出结论:如果满足条件2或者条件3,则先手必胜;否则,先手必输。

以下是相应的C++代码实现:
#include <iostream>
#include <cmath>
using namespace std;
string whoWins(int a, int b, int r) {
    int minSide = min(a, b);
    double minDiameter = r * sqrt(2);

    if (r >= minSide / 2)
        return "Bob win";
    else if (minDiameter > minSide)
        return "Bob win";
    else
        return "Alice win";
}

int main() {
    int a, b, r;
    cin >> a >> b >> r;

    string result = whoWins(a, b, r);
    cout << result << endl;
    
    return 0;
}
以上代码中,我们定义了一个whoWins函数来判断先手是否能赢得游戏。在main函数中,我们读取输入的a、b、r值,并调用whoWins函数进行判断,最后输出结果。

注意:在输入时,要确保纸的长度a和宽度b大于0,半径r大于等于0。考虑边界情况和非法输入超出范围的情况。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-1 19:53:21 | 显示全部楼层
学习编程中的Ben 发表于 2023-8-1 19:50
题目要求判断在一张长为a,宽为b的纸上放圆形片的游戏中,先手放纸片的人是否一定能赢。已放好的纸片不能挪 ...

捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 19:54:06 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-1 19:55:20 | 显示全部楼层
本帖最后由 香蕉那个不拿拿 于 2023-8-1 20:01 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-8-1 19:55:50 | 显示全部楼层
本帖最后由 香蕉那个不拿拿 于 2023-8-1 20:00 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 19:55:50 | 显示全部楼层
python还是c++?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-1 19:56:11 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 19:56:39 | 显示全部楼层

额,看私聊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 19:57:10 | 显示全部楼层    本楼为最佳答案   
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,r;
    cin >>a>>b>>r;
    if(a<2*r||b<2*r){
        cout <<"Bob win";
    }
    else cout<<"Alice win";
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 04:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表