洛谷集训1 青蛙(等差数列)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷集训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; }
以上是关于洛谷集训1 青蛙(等差数列)的主要内容,如果未能解决你的问题,请参考以下文章
《剑指Offer——10- I. 斐波那契数列,10- II. 青蛙跳台阶问题63. 股票的最大利润》代码
浴谷国庆集训 D2提高模拟测试1 Massacre at Béziers