洛谷集训1 青蛙(等差数列)

解题思路:

每次叫与停组成一个等差数列

数列的差为z;

可以利用公式把转数给求出,然后进行分类讨论;

灵魂画作:

出现错误:

1 变量错误,多设几个不同的变量,这次就把n弄混了;

2函数参数错误:要注意函数形参与实参的对应;

3双重循环中,不要弄混;

代码如下(周期版)

#include<cstdio>
#include<cstring>
#include<cmath>
struct waa
{
    int xx;
    int yy;
    int zz;
}wa[1000101];
int x,y,z;
long long int t;
long long n, ch=0;
int f1(int,int,int);
int f2(int);
int f3(int);
int main()
{
    freopen("frog.txt","r",stdin);
    //freopen("sample.in","r",stdin);
    //freopen("sample.out","r",stdout);
    scanf("%d%d",&n,&t);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d",&x,&y,&z);
        wa[i].xx=x;
        wa[i].yy=y;
        wa[i].zz=z;
    }
    for(int i=1;i<=n;i++)
    {int dd;
        int nn=f1(wa[i].xx,wa[i].yy,wa[i].zz);
        int tj=(nn*(nn-1)/2)*wa[i].zz+nn*wa[i].yy;
        dd=tj;
    //    int tz=f3(n);
    int tz=tj+nn*wa[i].xx;
        int we=t-tz;
        
        if(we>wa[i].xx)
        dd+=we-wa[i].xx;
        
        ch+=dd;    
    }
    printf("%lld",ch);
     
}
int f1(int x,int y,int z)//求出n 
{ int r;    
    if(z!=0)
    r=((-x-y+z*1.0/2)+sqrt(pow((x+y-z*1.0/2),2)+2*z*t))/z;
    if(z==0)
    r=t/(x+y);
    return r;
}
int f2(int i)//求出叫的时间 
{
    int e=(n*(n-1)/2)*wa[i].zz+n*wa[i].yy;
    return e;
}
int f3(int i)//求出总共时间 
{
    int w=(n*(n-1)/2)*wa[i].zz+n*(wa[i].yy+wa[i].xx);
    
    return w;
}

 

转载于:https://www.cnblogs.com/gzy20020702/p/7620431.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值