题目描述

有一条豪华游轮(其实就是条小木船),这种船可以执行4种指令:

right X : 其中X是一个1到719的整数,这个命令使得船顺时针转动X度。

left X : 其中X是一个1到719的整数,这个命令使得船逆时针转动X度。 forward X : 其中X是一个整数(1到1000),使得船向正前方前进X的距离。

backward X : 其中X是一个整数(1到1000),使得船向正后方前进X的距离。

随意的写出了n个命令,找出一个种排列命令的方法,使得船最终到达的位置距离起点尽可能的远。

输入输出格式

输入格式:

第一行一个整数n(1 <= n <= 50),表示给出的命令数。

接下来n行,每行表示一个命令。

输出格式:

一个浮点数,能够走的最远的距离,四舍五入到6位小数。

输入输出样例

输入样例#1:

3
forward 100
backward 100
left 90
输出样例#1:

141.421356

贪心思想。命令可以随意排列,那么开场肯定是全军突击(误),把所有前进指令都用完(走一半拐弯再走,肯定不如全程直走好),然后转向,尽可能接近180°,再倒着走。

求最适合的转向角度,我选择偷懒暴搜。偷懒的结果就是50分,剩下50分T掉了。

 /*by SilverN*/
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int mxn=;
const double pi=3.141592653;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
double an[mxn];
double fw[mxn];
double nx,ny;
int acnt=,rcnt=;
double dist(double x1,double y1,double x2,double y2){
return sqrt( (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) );
}
int n;
double ans=;
double ttd=;
void dfs(int rk,double now){
// printf("%d %.4f\n",rk,now);
if(rk>acnt){
double tnow=fabs(now);
double tmpx=nx+ttd*sin(tnow*pi/);
double tmpy=ny+ttd*cos(tnow*pi/);
// printf("%d %.4f %.4f\n",rk,tmpx,tmpy);
ans=max(ans,dist(tmpx,tmpy,,));
return;
}
dfs(rk+,now);
// printf("%.5f\n",now+an[rk]);
dfs(rk+,now+an[rk]);
return;
}
int main(){
n=read();
int i,j;
char ch[];double x;
nx=ny=;
for(i=;i<=n;i++){
scanf("%s%lf",ch,&x);
if(ch[]=='f'){
fw[++rcnt]=x;
}
if(ch[]=='b'){
fw[++rcnt]=-x;
}
if(ch[]=='l'){
an[++acnt]=-x;
// printf("in:%d",acnt);
if(an[acnt]<-)an[acnt]+=;
}
if(ch[]=='r'){
an[++acnt]=x;
if(an[acnt]<)an[acnt]-=;
}
}
ttd=;
for(i=;i<=n;i++){
if(fw[i]>)
ny+=fw[i];
else ttd+=fw[i];
}
sort(an+,an+acnt+);
dfs(,);
//
//
/* printf(" %d\n",dgans);
nx+=ttd*cos(dgans);
ny+=ttd*sin(dgans);*/
// printf("%.4f %.4f\n",nx,ny);
printf("%.6f\n",ans);
return ;
}

DFS

正解是DP。懒得写了,从rlt那里抄了代码233

 #include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const double pi=3.1415926535;
int n,sf,sb,p,ang[];
double ans;
bool f[][];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int x;
char ch[];
scanf("%s%d",ch,&x);
if(ch[]=='f')
sf+=x;
if(ch[]=='b')
sb+=x;
if(ch[]=='r')
ang[++ang[]]=x;
if(ch[]=='l')
ang[++ang[]]=-x;
}
f[][]=;
for(int i=;i<=ang[];i++)
for(int j=;j<;j++)
if(f[i-][j])
f[i][j]=,f[i][(j+ang[i]+)%]=;
p=;
for(int i=;i<;i++)
if(f[ang[]][i])
p=min(p,abs(i-));
ans=sqrt(sf*sf+sb*sb+*sb*sf*cos(p*pi/));
printf("%.6f\n",ans);
return ;
}

正解dp

洛谷P2625 豪华游轮的更多相关文章

  1. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  2. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  3. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  4. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  5. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  6. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  7. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  8. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

  9. 洛谷 P1379 八数码难题 Label:判重&&bfs

    特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...

随机推荐

  1. root.sh脚本支持checkpoints文件实现重复运行

    安装集群GRID/GI一般包括三个过程:首先,运行OUI/RunInstaller输入集群配置信息,其次,拷贝/编译集群文件,最后,以root用户运行root.sh脚本配置集群/启动集群,其中运行ro ...

  2. python 1:列表和字典

    初学Python, 对列表和字典的嵌套使用. phoneBook = [] #列表 list peopleInfo = {} #字典 dict i=0 while i<3: peopleInfo ...

  3. sort函数的使用

    此篇当作自己的笔记(水平太菜,这都一直没搞明白) sort()函数的用法1)sort函数包含在头文件<algroithm>中,还要结合using namespace std2)sort有三 ...

  4. 讲课笔记3——CSS

    背景常见样式: width:600px; height:800px; background:   url(bg.jpg)  no-repeat  40px 20px   fixed  gray ; * ...

  5. 按Esc键实现关闭窗体

    实现效果: 知识运用: KeyEventArgs类的KeyData属性 //获取KeyDown或KeyUp事件的键数据 public Keys KeyData {get;} 实现代码: private ...

  6. 【转载】WPF DataGrid 性能加载大数据

    作者:过客非归 来源:CSDN 原文:https://blog.csdn.net/u010265681/article/details/76651725 WPF(Windows Presentatio ...

  7. Kernel Stack Overflow(转)

    0x00 漏洞代码 stack_smashing.c #include <linux/init.h> #include <linux/module.h> #include &l ...

  8. Qt读写excel

    今天在利用Qt进行excel操作时,代码总是走到打开excel这一步是总是出现程序崩溃.在网上查找了各种帖子  说法不一,尝试都没有解决.后来猜想是不是excel没有激活影响的.发现自己的excel没 ...

  9. [POJ] 3362 Telephone Lines

    Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7978 Accepted: 2885 Descr ...

  10. Canal的安装与使用

    一.Canal介绍 Canal的原理就是它自己伪装成slave, 向mysql发送dump协议,MySQL master接收到dump请求之后推送binlog文件给slave, 也就是canal. 二 ...