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

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

解题思路:

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

数列的差为z;

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

灵魂画作:

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

出现错误:

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;
}