码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-10-02 17:53:10      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:ring   turn   公式   for   不同   1.5   amp   can   循环   

技术分享

解题思路:

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

数列的差为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;
}

 

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

标签:ring   turn   公式   for   不同   1.5   amp   can   循环   

原文地址:http://www.cnblogs.com/gzy20020702/p/7620431.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!