计蒜客 The 2018 ACM-ICPC Chinese Collegiate Programming Contest Rolling The Polygon
1 include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <algorithm> 6 #include <utility> 7 #include <vector> 8 #include <map> 9 #include <queue> 10 #include <stack> 11 #include <cstdlib> 12 #include <cmath> 13 typedef long long ll; 14 #define lowbit(x) (x&(-x)) 15 #define ls l,m,rt<<1 16 #define rs m+1,r,rt<<1|1 17 using namespace std; 18 #define pi acos(-1) 19 const int N=60; 20 struct Node{ 21 int x,y; 22 }node[N]; 23 int main() 24 { 25 int t,n; 26 double tx,ty; 27 scanf("%d",&t); 28 for(int i=1;i<=t;i++) 29 { 30 scanf("%d",&n); 31 for(int i=0;i<n;i++){ 32 scanf("%lf%lf",&node[i].x,&node[i].y);//lf 33 } 34 scanf("%lf%lf",&tx,&ty); 35 // 为了下面的第n次旋转 36 node[n].x=node[0].x,node[n].y=node[0].y; 37 node[n+1].x=node[1].x,node[n+1].y=node[1].y; 38 double ans=0; 39 for(int i=0;i<n;i++)//要转n次 40 { 41 double a=sqrt(pow(node[i].x-node[i+1].x,2)+pow(node[i].y-node[i+1].y,2)); 42 double b=sqrt(pow(node[i+1].x-node[i+2].x,2)+pow(node[i+1].y-node[i+2].y,2)); 43 double c=sqrt(pow(node[i].x-node[i+2].x,2)+pow(node[i].y-node[i+2].y,2)); 44 //利用余弦定理求角度 45 // pi-acos((a*a+b*b-c*c)/(2*a*b)) 为node[i+1]转过的角度,也就是(tx,ty)转过的角度 46 double l=pi-acos((a*a+b*b-c*c)/(2*a*b));//一个小数,因为最后也以小数形式输出。 47 //弧长=半径*弧度 48 double r=sqrt(pow(node[i+1].x-tx,2)+pow(node[i+1].y-ty,2)); 49 ans+=l*r; 50 } 51 printf("Case #%d: %.3f\n",i,ans); 52 } 53 return 0; 54 }
分类:
几何
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现