BestCoder Round #79 (div.2)-jrMz and angles,,暴力求解~
jrMz and angle
jrMz有两种角,第一种角都是正nn边形的内角,第二种角都是正mm边形的内角。jrMz想选出其中一些,某种角可以选多个或一个都不选,使得选出的所有角的度数之和恰好为360度。jrMz想知道这是否可能实现。
有多组测试数据,第一行一个整数\left(1\leq T\leq10\right)(1≤T≤10),表示测试数据的组数。
对于每组测试数据,仅一行,两个整数n,m\left(3\leq n,m\leq100\right)n,m(3≤n,m≤100),之间有一个空格隔开。
对于每组测试数据,仅一行,一个字符串,若可能实现则为Yes,若不可能实现则为No。
3
4 8
3 10
5 8
Yes
Yes
No
第一组数据中,jrMz可以选择1个第一种角和2个第二种角,因为90+135+135=36090+135+135=360。
第二组数据中,jrMz可以选择6个第一种角,因为6\times60=3606×60=360。
第三组数据中,jrMz无法选出一些度数之和为360度的角。
看到这题的数据范围我就笑了,当第一反应就是暴力求解,我们知道正n(n>=3)边形内角和为 180*(n-2),每个内角的角度就可以表示出来,然后两层循环遍历;
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
const int N=1000000+10;
int a[N];
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
int x1=180-360/n;
int x2=180-360/m;//正m边形的内角;
int f=0;
for(int i=0;; i++)
{
if(f||i*x1>360)
break;
for(int j=0;; j++)
{
if(i*x1+j*x2==360)
{
f=1;
break;
}
if(j*x2>360)
break;//限制条件,这样没有搜下去的必要了;
}
}
if(f)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
不过题解好像要更简单一点:
不妨令n\leq mn≤m。
如果n>6n>6,由于所有角都大于120度且小于180度,也就是说,两个角一定不够,而三个角一定过多。因此一定无解;
当n\leq6n≤6时,如果n=3n=3或n=4n=4或n=6n=6,那么显然只需要正nn边形的角就可以了。如果n=5n=5,则已经有一个108度的角。若这种角:不取,则显然仅当m=6m=6时有解;取1个,则还差360-108=252360−108=252(度),但是没有一个正mm边形的内角的度数是252的约数;取2个,则还差360-108\times2=144360−108×2=144(度),这恰好是正10边形的内角,取3个,则还差360-108\times3=36360−108×3=36(度),也不可能满足;取大于3个也显然不可能。
因此得到结论:当nn和mm中至少有一个为3或4或6时,或者当nn和mm中一个等于5另一个等于10时,有解,否则无解,时间复杂度为
O\left(T\right)O(T)。
BestCoder Round #79 (div.2)-jrMz and angles,,暴力求解~的更多相关文章
- BestCoder Round #79 (div.2)
1001.没推到题解那么细,枚举一下也可以.用通分可以避免小数精度问题. #include<iostream> #include<stdio.h> using namespac ...
- BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)
Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- BestCoder Round #68 (div.2) tree(hdu 5606)
tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- BestCoder Round #11 (Div. 2) 题解
HDOJ5054 Alice and Bob Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- hdu5635 BestCoder Round #74 (div.2)
LCP Array Accepts: 131 Submissions: 1352 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 13 ...
- hdu 5636 搜索 BestCoder Round #74 (div.2)
Shortest Path Accepts: 40 Submissions: 610 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: ...
- hdu5634 BestCoder Round #73 (div.1)
Rikka with Phi Accepts: 5 Submissions: 66 Time Limit: 16000/8000 MS (Java/Others) Memory Limit: ...
- hdu5631 BestCoder Round #73 (div.2)
Rikka with Graph Accepts: 123 Submissions: 525 Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- hdu5630 BestCoder Round #73 (div.2)
Rikka with Chess Accepts: 393 Submissions: 548 Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
随机推荐
- jQuery attr() 源码解读
我们知道,$().attr()实质上是内部调用了jQuery.access方法,在调用时jQuery.attr作为回调传入.在通过种种判断(参看jQuery.access()方法)之后,取值和赋值最后 ...
- React.js 的 context
这一节我们来介绍一个你可能永远用不上的 React.js 特性 —— context.但是了解它对于了解接下来要讲解的 React-redux 很有好处,所以大家可以简单了解一下它的概念和作用. 在过 ...
- webpack采坑十连跳
4.css.js一同打包进html ---------------- https://www.cnblogs.com/amiezhang/p/9723565.html 依赖内联插件 HtmlWebp ...
- Java开发笔记(九十四)文件通道的性能优势
前面介绍了字节缓存的一堆概念,可能有的朋友还来不及消化,虽然文件通道的用法比起传统I/O有所简化,可是平白多了个操控繁琐的字节缓存,分明比较传统I/O更加复杂了.尽管字节缓存享有缓存方面的性能优势,但 ...
- sql server 收缩日志文件
USE 数据库名称 GO ALTER DATABASE 数据库名称 SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE 数据库名称 SET RECOV ...
- (转)Spring+JDBC组合开发
http://blog.csdn.net/yerenyuan_pku/article/details/52882435 搭建和配置Spring与JDBC整合的环境 使用Spring+JDBC集成步骤如 ...
- maven打包的含义
我们在用maven构建java项目时,最常用的打包命令有mvn package.mvn install.deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命 ...
- JS:输出9*9乘法表
<html> <head> <title>9*9 multiplication table</title> </head> <body ...
- 在Vue中遇到的各种坑 及性能提升
Vue: (1) 没有再模板里引用data数据,会不会引起update.beforeUpdate生命周期函数的执行? 不会 (2)组件改成异步 (3)v-once (4)如果不用template ...
- js 数组过滤 filter
let res = this.list.filter(item => routeEqual(this.currentRouteObj, item) || item.name === this.$ ...