zoukankan      html  css  js  c++  java
  • HDU 5660 jrMz and angles (暴力枚举)

    jrMz and angles

    题目链接:

    http://acm.hust.edu.cn/vjudge/contest/123316#problem/E

    Description

    jrMz has two types of angles, one type of angle is an interior angle of -sided regular polygon, and the other type of angle is an interior angle of -sided regular polygon. jrMz wants to use them to make up an angle of 360 degrees, which means, jrMz needs to choose some or none of the angles which belong to the first type and some or none of the angles which belong to the second type so that the sum value of the angles chosen equals 360 degrees. But jrMz doesn’t know whether it is possible, can you help him?

    Input

    The first line contains an integer ——The number of the test cases.
    For each test case, the only line contains two integers with a white space separated.

    Output

    For each test case, the only line contains a integer that is the answer.

    Sample Input

    3
    4 8
    3 10
    5 8

    Sample Output

    Yes
    Yes
    No

    Hint

    In test case 1, jrMz can choose 1 angle which belongs to the first type and 2 angles which belong to the second type, because 90+135+135=360. In test case 2, jrMz can choose 6 angles which belong to the first type, because6 imes60=360. In test case 3, jrMz can’t make up an angle of 360 degrees.

    题意:

    给出m和n; 对于正m边形和正n边形;
    任取这两个几何图形的内角;(可取超过m个正m边形的内角)
    判断能否使其之和为360度.

    题解:

    公式:正N边形的内角度数为 (N-2) * 180° / N ;
    由于n和m的规模较小,直接枚举即可;
    注意:

    1. 讲道理对于正n边形,不会取到超过n个内角(n越大内角越大);
      但是n=3时为特例,可以取6个60°构成360度;
      可以对n=3特判或者枚举时扩大范围至n+3;
    2. 题目给的n m范围为大于等于1,一开始很疑惑1和2的时候怎么处理;
      后来直接交了后发现没有这种测试数据...

    代码:

    代码1:化简了一通;i(n-2)180/n + j(m-2)180/m = 360;

    化简后为 i(n-2)m + j(m-2)n == 2mn;

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <queue>
    #include <map>
    #include <set>
    #include <vector>
    #define LL long long
    #define eps 1e-8
    #define maxn 1500
    #define mod 100000007
    #define inf 0x3f3f3f3f
    #define IN freopen("in.txt","r",stdin);
    using namespace std;
    
    
    int main(int argc, char const *argv[])
    {
        //IN;
    
        int t;  scanf("%d", &t);
        while(t--)
        {
            cin >> n >> m;
            int a = (n-2)*m;
            int b = (m-2)*n;
            int c = 2*m*n;
    
            int flag = 0;
            for(int i=0; i<=n+3; i++) {
                for(int j=0; j<=m+3; j++) {
                    if(a*i+b*j==c) {flag = 1;break;}
                }
                if(flag) break;
            }
    
            if(flag) printf("Yes
    ");
            else printf("No
    ");
        }
    
        return 0;
    }
    

    代码2:直接先算出每个内角度数再枚举.

    (double改成int也过了,很奇怪)

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <queue>
    #include <map>
    #include <set>
    #include <vector>
    #define LL long long
    #define eps 1e-8
    #define maxn 1100
    #define inf 0x3f3f3f3f
    #define IN freopen("in.txt","r",stdin);
    using namespace std;
    
    int n, m;
    
    int main(int argc, char const *argv[])
    {
        //IN;
    
        int t;  scanf("%d", &t);
        while(t--)
        {
            scanf("%d %d", &n, &m);
    
            double a = (n-2)*180/n;
            double b = (m-2)*180/m;
    
            int flag = 0;
            for(int i=0; ; i++) {
                if(a*i > 360.0) break;
                for(int j=0; ; j++) {
                    if(a*i+b*j == 360.0) {
                        flag = 1;
                        break;
                    }
                    if(a*i+b*j > 360.0) break;
                }
                if(flag) break;
            }
    
            if(flag) printf("Yes
    ");
            else printf("No
    ");
        }
    
        return 0;
    }
    
    
  • 相关阅读:
    如何优雅地用Redis实现分布式锁?
    redis 持久化有几种方式?
    怎么保证缓存和数据库数据的一致性?
    jedis 和 redisson 有哪些区别?
    redis支持哪些数据类型?redis命令大全
    什么是redis的缓存雪崩与缓存穿透?如何解决?
    redis 为什么是单线程的?
    什么是memecache?redis 和 memecache 有什么区别?
    Redis入门到精通(九)——Redis数据库基本操作(切换数据库,数据移动,删除数据)
    Redis入门到精通(八)——key通用指令基本操作、key扩展操作(时效性控制、查询模式)、key其他操作(为key改名)
  • 原文地址:https://www.cnblogs.com/Sunshine-tcf/p/5698875.html
Copyright © 2011-2022 走看看