zoukankan      html  css  js  c++  java
  • luogu2625 豪华游轮

    题目

    luogu2625

    题解

    若无角度限制,最远距离就是先向前走完forward,再转180度走backward,有角度限制时,旋转角度越接近180,距离最远(已知三角形两边,夹角越大,第三边越大)

    用背包扫出所有可能的角度

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #define pi 3.1415926535898
    using namespace std; 
    
    char s[10];
    int n,a[55],t,Forward,Backward;
    bool f[55][365];
    
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%s%d",s,&t);
    		if(s[0]=='f') Forward+=t;
    		else if(s[0]=='b') Backward+=t;
    		else if(s[0]=='l') a[++a[0]]=t%360;
    		else a[++a[0]]=-(t%360);
    	}
    	f[0][0]=1;
    	for(int i=1;i<=a[0];i++)
    		for(int j=0;j<360;j++)
    		f[i][j]=(f[i-1][(j+a[i]+360)%360]|f[i-1][j]);
    	int dif=180;
    	for(int j=0;j<360;j++)
    		if(f[a[0]][j]&&abs(j-180)<dif) dif=abs(j-180);
    	double ans=sqrt((double)Forward*Forward+(double)Backward*Backward-(double)2*Forward*Backward*(cos((double)(180-dif)*pi/180)));//余弦定理
    	printf("%lf",ans);
    	return 0;
    }
  • 相关阅读:
    字符编码
    IO流技术
    TreeMap使用和Comparable比较
    Collections工具类
    使用迭代器进行遍历时
    238. 除自身以外数组的乘积
    python 字典按键、值排序
    collections.Counter用法
    442. 数组中重复的数据
    1395. 统计作战单位数
  • 原文地址:https://www.cnblogs.com/XYZinc/p/7593703.html
Copyright © 2011-2022 走看看