zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    【集训第二天·翻水的老师】--ac自动机+splay树
    【集训第一天·特来卖萌】树链剖分之水水的例题
    1.ARM寄存器简解
    2.汇编代码的简单实现
    Android之Activity 生命周期
    Android之SQLite
    魅族 -- 禁止D及以下级别LOG的输出
    常用的SQL语句
    Android开发工具
    Android介绍
  • 原文地址:https://www.cnblogs.com/andyqsmart/p/4528888.html
Copyright © 2011-2022 走看看