• ACM学习历程—BestCoder 2015百度之星资格赛1004 放盘子(策略 && 计算几何)


    Problem Description

    小度熊喜欢恶作剧。今天他向来访者们提出一个恶俗的游戏。他和来访者们轮流往一个正多边形内放盘子。最后放盘子的是获胜者,会赢得失败者的一个吻。玩了两次以后,小度熊发现来访者们都知道游戏的必胜策略。现在小度熊永远是先手,他想知道他是否能获胜。

    注意盘子不能相交也不能和多边形相交也不能放在多边形外。就是说,盘子内的点不能在多边形外或者别的盘子内。

    Input

    第一行一个整数T 
    ,表示T 
    组数据。每组数据包含
    个数n,a,r(4n100,0<a<1000,0<r<1000


    是偶数,代表多边形的边数,
    代表正多边形的边长,
    代表盘子的半径。

    Output

    对于每组数据,先输出一行

    Case #i:

    然后输出结果.如果小度熊获胜,输出”Give me a kiss!” 否则输出”I want to kiss you!”

    Sample Input
    2
    4 50 2.5
    4 5.5 3
    
    Sample Output
    Case #1:
    Give me a kiss!
    Case #2:
    I want to kiss you!
    Hint
    在第一组样例中,小度熊先在多边形中间放一个盘子,接下来无论来访者怎么放,小度熊都根据多边形中心与来访者的盘子对称着放就能获胜。

    在Hint已经说明。

    只需要首先在中心放盘子,然后来访者无论怎么放,小度熊自然可以对称来放。

    所以只要第一个能放下是必胜的。

    第一个判断就是判断中心点到多边形边的距离和盘子半径进行比较。

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <deque>
    #include <map>
    #include <set>
    #include <string>
    #define LL long long
    
    using namespace std;
    
    const double PI = acos(-1);
    
    int main()
    {
        //freopen("test.in", "r", stdin);
        int T, n;
        double a, r;
        scanf("%d", &T);
        for (int times = 1; times <= T; ++times)
        {
            printf("Case #%d:
    ", times);
            scanf("%d%lf%lf", &n, &a, &r);
            if (a/2/tan(PI/n) <= r)
                printf("I want to kiss you!
    ");
            else
                printf("Give me a kiss!
    ");
        }
        return 0;
    }
  • 相关阅读:
    JAVA基础(十六)Super关键字
    JAVA基础(十五)this关键字
    JAVA基础(十四2.0)
    JAVA基础(十三)多态
    JAVA基础(十二)抽象类与接口
    git基本使用
    vuetify中treeview部分属性梳理
    vuetify初次使用心得
    react-常见面试题
    maven中profile的使用
  • 原文地址:https://www.cnblogs.com/andyqsmart/p/4528888.html
Copyright © 2020-2023  润新知