8月12日总结

今天ac了两道题,上午做了一道数学题,做的时候总体思路是对的但是解题思路有点错误所以给解题造成了很大的麻烦,废了很大的功夫,然后下午写第二道题,写着写着发现杭电关了,然后写完之后还是没打开,无奈之下看了看单调队列的课件。

1.Expanding Rods(数学问题):

题目大意:题意是一根长度为L的木棒,加热n度之后长度变为L'=(1+n*C)*L,其中C是木棒的热膨胀系数。给出L,n,C。求木棒在加热前后中心点的距离是多少。

代码:#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
double l0,l,r,h,n,k,low,high,mid;
int judge(double h)
{
    r=(l*l)/(8.0*h)+h/2.0;
    if(2.0*r*asin(l/(r*2.0))<l0)
        return 0;
    return 1;
}
int main()
{
    while(cin>>l>>n>>k)
    {
        if(l<0&&n<0&&k<0)
            break;
        l0=(1.0+n*k)*l;
        low=0.0;
        high=l/2.0;
        while(low+0.000001<high)
        {
            mid=(low+high)/2.0;
            if(judge(mid))
                high=mid;
            else
                low=mid;
        }
        cout<<fixed<<setprecision(3)<<low<<endl;
    }
    return 0;
}

题后总结:这个题刚看的时候毫无头绪,感觉无从下手,然后就开始想,在演草纸上画,一个小时之后画着画着忽然想到可以用圆的知识来解题,然后看到题目上写的增长的部分为圆形,这一个要求就保证了我的想法是对的,然后我的想法把原来木棒的中心看成(0,0)点,然后找到圆点,然后通过求出圆点与木棒一个端点的长度确定出来半径,然后减去(0,0)点与圆点的距离就是想求的木棒中点移动的长度,但是想了很久最终也没想出来圆点该怎么确定,最后真的是想不出来了,看了一下别人的解题思路,他们并不是求圆点,可能是我一开始思路就错了,所以怎么想都不会有结果,也可能是我的知识不足,用这种方法解不出来。一上午搞这个题搞的头都快炸了。

2.Drying:

题目大意:有一些衣服,每件衣服有一定水量,有一个烘干机,每次可以烘一件衣服,每分钟可以烘掉k滴水。每件衣服没分钟可以自动蒸发掉一滴水,用烘干机烘衣服时不蒸发。问最少需要多少时间能烘干所有的衣服。

代码:#include<stdio.h>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
long long a[100100],l,r,mid;
long long n,k;
int judge(long long mid)
{
    long long sum=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]<=mid)
         continue;
         sum+=(ceil((a[i]-mid)*1.0/(k-1)));
    }
    return sum>mid;


}
int main()
{
    while(scanf("%I64d",&n)!=EOF)
    {
        memset(a,0,sizeof(a));
        long long maxx=-1,ans=0;
        for(int i=0;i<n;i++)
        {
            scanf("%I64d",&a[i]);
            maxx=max(maxx,a[i]);
        }
        cin>>k;
        if(k==1)
        {printf("%I64d\n",maxx);
         continue;}
         l=0;
         r=maxx;
         while(l<=r)
         {
             mid=(l+r)/2;
             if(judge(mid))
            l=mid+1;
             else
             {r=mid-1;
               ans=mid;}
}
        printf("%I64d\n",ans);
    }
}

题后感想:在judge函数用到了ceil函数,刚开始我用的int但是不对,然后找到了ceil这个函数,然后有看到了floor函数,放在这里正好适用,这里必须要用ceil函数,因为这里只要大于这个整数一点点就得往上进一,一开始用c语言超时,后来改成了c++。

ceil函数:ceil(n)的意思是向正方向舍入,这一点要与floor(n)向负方向舍入一起讲,能够更好的区分,举例说明:
ceil(pi)=4; ceil(3.5)=4; ceil(-3.2)=-3;向正方向舍入
floor(pi)=3; floor(3.5)=3; floor(-3.2)=-4;向负方向舍入

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值