zoukankan      html  css  js  c++  java
  • [无聊测试赛] T7 豪华游轮

    观察题目,发现可以贪心能往前走多少往前走多少,然后尽量扭180度后退.剩下角度可以通过原地扭屁股实现,并不会影响距离

    开两个变量分别记录往前走和往后走的距离.角度只需一个数组,往左记为 ( heta) ,往右记为 (360- heta)

    怎么找最接近 (180) ?背包...

    答案怎么找?假设我们从 ((0,0)) 出发,如果找到终点的 (x)(y) 就能用勾股定理求出距离.x的值为往前走的值 * 往后走的值 (cos( heta)),y的值为往后走的值 * (sin( heta))

    蓝色与绿色夹角是我们求出来的,用三角函数能找出x和y

    #include <iostream>
    #include <algorithm>
    #include <math.h>
    using namespace std;
    const int mod = 360;
    const int MAXN = 725;
    int n, fwd,bwd,tot,degree = mod;
    double x_coord, y_coord;
    int pos[MAXN];
    int dp[MAXN * mod];
    bool vis[MAXN*mod];
    double dist(double a, double b){
      return sqrt(a*a+b*b);
    }//勾股定理
    const double pi = 3.1415926535897932;
    double cvt(double deg){
    	double angle = deg;
    	double result =(angle * pi)/180;
    	return result;
    }//角度转化为弧度
    int main(){
      cin >> n;
      for (int i=0;i<n;i++){
        string a;int b;cin >> a >> b;
        if(a[0]=='f') fwd+=b;
        else if (a[0]=='b') bwd += b;
        else if (a[0]=='l') pos[++tot] = b%mod;
        else pos[++tot] = 360-(b%mod);
      }
      vis[0] = true;
      for (int i=1;i<=tot;i++){
        for (int j=MAXN*n;j>=0;j--){
          if (pos[i]>j) break;
          if (vis[j-pos[i]]){
            vis[j] = true;
            degree = min(degree,abs((j%mod)-180));
          }//背包
        }
      }
      x_coord = (double)fwd+(double)bwd*cos(cvt(degree));
      y_coord = (double)bwd * (double)sin(cvt(degree));
      //找x和y的值
      printf("%.6f",dist(x_coord,y_coord));
    }
    
  • 相关阅读:
    python学习之strip()
    python学习之find()
    Linux scp命令
    TensorFlow学习笔记4——变量共享
    TensorFlow学习笔记 速记1——tf.nn.dropout
    TensorFlow学习笔记 补充2—— 生成特殊张量
    sublime test3 安装及配置
    TensorFlow学习笔记3——Placeholders and feed_dict
    TensorFlow学习笔记 补充1——InteractiveSession
    TensorFlow学习笔记2——数据类型及简单运算
  • 原文地址:https://www.cnblogs.com/DannyXu/p/12536355.html
Copyright © 2011-2022 走看看