香蕉那个不拿拿 发表于 2023-8-1 19:04:44

求解此题

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

https://xjoi.net/problem/1176

歌者文明清理员 发表于 2023-8-1 19:05:49

Mike_python小 发表于 2023-8-1 19:06:06

进不去,显示一个彩虹猫

isdkz 发表于 2023-8-1 19:06:45

稍等片刻,快马加鞭解题中。。。

isdkz 发表于 2023-8-1 19:11:38

你还是把题目放出来吧,我们可能因为级别不够看不了

香蕉那个不拿拿 发表于 2023-8-1 19:22:20

歌者文明清理员 发表于 2023-8-1 19:05


已放出

香蕉那个不拿拿 发表于 2023-8-1 19:22:52

Mike_python小 发表于 2023-8-1 19:06
进不去,显示一个彩虹猫

已放出

香蕉那个不拿拿 发表于 2023-8-1 19:23:24

isdkz 发表于 2023-8-1 19:06
稍等片刻,快马加鞭解题中。。。

已放出

学习编程中的Ben 发表于 2023-8-1 19:47:03

香蕉那个不拿拿 发表于 2023-8-1 19:23
已放出

复制成文本给我OK?

学习编程中的Ben 发表于 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。考虑边界情况和非法输入超出范围的情况。

香蕉那个不拿拿 发表于 2023-8-1 19:53:21

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

学习编程中的Ben 发表于 2023-8-1 19:54:06

香蕉那个不拿拿 发表于 2023-8-1 19:53


em

香蕉那个不拿拿 发表于 2023-8-1 19:55:20

本帖最后由 香蕉那个不拿拿 于 2023-8-1 20:01 编辑

香蕉那个不拿拿 发表于 2023-8-1 19:55:50

本帖最后由 香蕉那个不拿拿 于 2023-8-1 20:00 编辑

学习编程中的Ben 发表于 2023-8-1 19:54
em

学习编程中的Ben 发表于 2023-8-1 19:55:50

python还是c++?

香蕉那个不拿拿 发表于 2023-8-1 19:56:11

学习编程中的Ben 发表于 2023-8-1 19:55
python还是c++?

c++

学习编程中的Ben 发表于 2023-8-1 19:56:39

香蕉那个不拿拿 发表于 2023-8-1 19:55
此代码可AC

额,看私聊

学习编程中的Ben 发表于 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;
}
页: [1]
查看完整版本: 求解此题