HDU-ACM“菜鸟先飞”冬训系列赛——第10场

Problem A

题意
给出l(房子宽度),d(pole距离房子的垂直距离),s(绳子长度),求可覆盖的面积
sample
分析
一共四种情况
\[1.s<=d\]
\[2.s<=sqrt(d*d+l*l/2)\]
\[3.s<=sqrt(d*d+l*l/2)+l/2\]
\[4.s>sqrt(d*d+l*l/2)+l/2\]
说一下第四种,第四种要减去一个重叠部分,重叠部分面积为2个(扇形-三角形),具体见代码
代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
#include <queue>
using namespace std;

#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
#pragma comment(linker, "/STACK:102400000,102400000")
inline void read(int &x){x=0; char ch=getchar();while(ch<'0') ch=getchar();while(ch>='0'){x=x*10+ch-48; ch=getchar();}}
const double eps=1e-8;
const double pi=acos(-1.0);
int t;
double l,d,s;
void solve()
{
    if(s-d<eps)//1
    {
        printf("%.2f\n",pi*s*s);return ;
    }
    double ret=sqrt(0.25*l*l+d*d),angle=acos(d/s);
    if(s-ret<eps)//2
    {

        printf("%.2f\n",(pi-angle)*s*s+d*sqrt(s*s-d*d));
        return ;
    }
    angle=asin(0.5*l/ret);
    double ans=(pi-angle)*s*s+0.5*l*d;
    s-=ret,angle+=pi*0.5;
    ans+=angle*s*s;
    if(s-0.5*l>eps)
    {
        double angle1=acos(0.5*l/s);
        ans-=angle1*s*s-l*0.5*sqrt(s*s-l*l*0.25);
    }
    printf("%.2f\n",ans);
}
int main()
{
    for(scanf("%d",&t);t--;)
    {
        scanf("%lf %lf %lf",&l,&d,&s);
        solve();
    }
    return 0;
}

Problem B

题意
给出n个Merlin需要发短信的朋友,再给出m个Merlin不需要发短信的朋友,问Merlin需要发多少短信
分析
用map记录不需要发短信朋友,再扫一遍就OK了

Problem E

题意
帮助Max挑出可能符合条件的酒店
分析
看了blog,递归是个好东西,脑洞开了一点
代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
#include <queue>
using namespace std;

#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
#pragma comment(linker, "/STACK:102400000,102400000")
inline void read(int &x){x=0; char ch=getchar();while(ch<'0') ch=getchar();while(ch>='0'){x=x*10+ch-48; ch=getchar();}}

char a[55],b[55];
int n,lena,lenb,cnt;
bool check(int x,int y)
{
    if((x==lena)&&(y==lenb)) return 1;
    if((x==lena)||(y==lenb)) return 0;
    if((a[x]=='?')||(a[x]==b[y])) return check(x+1,y+1);
    if(a[x]=='*') for(int i=y;i<=lenb;++i) if(check(x+1,i)) return 1;
    return 0;
}
int main()
{
    while(scanf("%s",a)!=EOF)
    {
        //printf("a=%s\n",a);
        lena=strlen(a);cnt=0;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%s",b);
            lenb=strlen(b);
            if(check(0,0))
            {
                //printf("%s\n",b);
                cnt++;
            }
        }
        printf("%d\n",cnt);
    }
    return 0;
}

Problem F

题意
用给出的几个字符串组成最小的字符串
分析
string的比较学习了,需要\(a+b<b+a\),而不是\(a<b\)
资料
代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
#include <queue>
using namespace std;

#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
#pragma comment(linker, "/STACK:102400000,102400000")
inline void read(int &x){x=0; char ch=getchar();while(ch<'0') ch=getchar();while(ch>='0'){x=x*10+ch-48; ch=getchar();}}

int t,n;
string a[10],temp;
bool cmp(string a,string b)
{
    return a+b<b+a;
}
int main()
{
    for(scanf("%d",&t);t--;)
    {
        scanf("%d",&n);
        F(i,1,n) cin>>a[i];
        sort(a+1,a+1+n,cmp);
        F(i,1,n) cout<<a[i];
        puts("");
    }
    return 0;
}

Problem G

题意
找出出现了一次的数
分析
怎么都能做
sort,map都行

转载于:https://www.cnblogs.com/chendl111/p/6403339.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值