UVA 10089 Repackaging 数学问题
2018-06-17 23:35:38来源:未知 阅读 ()
大致题意:给出几个包裹,每个包裹都包装好了3种大小的杯子。现在要重新包装,使向量
a[1]*(s[1][1],s[1][2],s[1][3])+a[2]*(s[2][1],s[2][2],s[2][3])+.....+a[n]*(s[n][1],s[n][2],s[n][3])=(k,k,k). 就这样转化成了向量问题其中a[i]为非负整数,k为正整数。
虽然转化成了向量问题,但是三维向量和这么多变量有点棘手,所以我们可以先降维,将原等式变化成:
a[1]*(s[1][2]-s[1][1],s[1][3]-s[1][1])+ a[2]*(s[2][2]- s[2][1],s[2][3]- s[2][1])+.....+a[n]*(s[n][2]- s[n][1],s[n][3]- s[n][1])=(0,0).
把二维向量看成以平面坐标系中以原点为起点的向量。如果只有两个向量,因为a[i]为非负数,所以只有两个向量的时候夹角必须为PI。n个向量的话,只要相邻两个向量的夹角不大于PI即可满足上述等式。代码不长,但是需要数学思维T_T
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> using namespace std; const int maxn=1000+5; const double PI=acos(-1); int main() { int n; double A[maxn]; while(scanf("%d",&n),n) { int s1,s2,s3; for(int i=0;i<n;i++) { scanf("%d%d%d",&s1,&s2,&s3); A[i]=atan2(s2-s1,s3-s1); } sort(A,A+n); double tmp=0; for(int i=1;i<n;i++) tmp=max(tmp,A[i]-A[i-1]); tmp=max(tmp,A[0]-A[n-1]+2*PI); if(tmp<=PI) printf("Yes\n"); else printf("No\n"); } return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- [Uva1637][DFS][记忆化] 纸牌游戏 Double Patience 2020-03-06
- Prime Time UVA - 10200(精度处理,素数判定) 2019-08-16
- J - Fire! UVA - 11624 2018-09-01
- uva11768 Lattice Point or Not 2018-08-14
- UVALive - 6434 (贪心) 2018-07-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash