求助(在线等玄关)
  • 板块灌水区
  • 楼主exCat
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/23 10:34
  • 上次更新2024/8/23 12:58:12
查看原帖
求助(在线等玄关)
361932
exCat楼主2024/8/23 10:34

一直80分改不出来了 P2625 豪华游轮
大体思路就是将前进后退的指令放在一起,中间尽量旋转180度,剩下的最后再旋。

#include <bits/stdc++.h>
using namespace std;
int n,d,ans1,ans2,sz[51],fz[51],cur;
bool dp[100][361];
string s;
const double PI = acos(-1.0);
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		cin >> s >> d;
		if(s[0]=='r')sz[++sz[0]]=d%360;
		if(s[0]=='l')fz[++fz[0]]=d%360;
		if(s[0]=='f')ans2+=d;
		if(s[0]=='b')ans1+=d;
	}
	dp[0][0]=dp[0][360]=1;
	for(int i=1;i<=sz[0];i++)
	{
		//if(sz[i]==0)continue;
		for(int j=359;j;j--)
		{
			dp[i][j]=dp[i-1][j];
			dp[i][j]|=dp[i-1][(j-sz[i]+360*10)%360];
		}
	}
	for(int i=1+sz[0];i<=fz[0]+sz[0];i++)
	{
		//if(fz[i-sz[0]]==0)continue;
		for(int j=1;j<360;j++)
		{
			dp[i][j]=dp[i-1][j];
			dp[i][j]|=dp[i-1][(j+fz[i-sz[0]]+720)%360];
		}
			
	}
	for(int i=0;i<=180;i++)
	{
		if(dp[fz[0]+sz[0]][180-i]||dp[fz[0]+sz[0]][180+i])
		{
			cur=i;
			break;
		}
	}
	double ans=sqrt(ans2*ans2+ans1*ans1+2*ans1*ans2* cos(cur* PI / 180));
	printf("%.6f\n",ans);
	return 0;
 } 
2024/8/23 10:34
加载中...