UVA 10382 Watering Grass 贪心

本文分享了一个关于使用贪心算法解决特定问题的经历,重点讨论了如何有效编写代码,并从他人代码中学习到的关键技巧,包括变量定义和边界条件的处理。

这么经典的贪心的,,

我又败在了书写代码上。。。


或者说我都没有很用心地分析写怎样的代码号。。


收货:

(1)看别人是如何用   i的。。。int i在外部,,这样i 自然就像是static一样定格了, 

(2)别人居然考虑到了细节  就是2*r<w

.


(3)  如果不是自己敲了, 而只是看了别人的代码,还真的没有这些收货。


#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
#define sf scanf
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a));
#define bug1 printf("bug1\n");
#define eps 1e-8
const int maxn=10005;
int n,L,w;
struct Node{
    double l,r;
    bool friend operator <(Node a,Node b){
        if(a.l==b.l)return a.r<b.r;
        return a.l<b.l;
    }
}a[maxn];

int main(){
    while(~sf("%d%d%d",&n,&L,&w)){
        int cnt=0;
        for(int i=1;i<=n;++i){
            double p,r;
            sf("%lf%lf",&p,&r);
            if(2*r<=w)continue;//细节
            a[++cnt].l=p-sqrt(r*r-w*w*0.25);
            a[cnt].r=p+sqrt(r*r-w*w*0.25);
        }
        sort(a+1,a+1+cnt);
        double len=0;
        int ans=0;int flag=0;
        int i=1;//******很好
        while(len<L){
            double maxl=0;
            for(;i<=cnt;++i){
                if(a[i].l<=len){
                    maxl=max(maxl,a[i].r);
                }
                if(a[i].l>len)break;
            }
            if(maxl==0){flag=1;break;}
            ans++;len=maxl;
        }
        if(flag)puts("-1");
        else pf("%d\n",ans);
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值