https://www.luogu.com.cn/problem/P6056
这个题太麻烦了
- 不知道出题人希望我们结算的顺序是什么,反正只过了三个点。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long long s,f,r=0,n,tot;double a,b;
cin >> s>>f>>n>>a>>b;
tot = s+f;
for(int i = 1;i <= n;i++)
{
r += ceil(b*f);
f += ceil(a*s*f);
f -= r;
s = tot - f - r;
}
cout << s << " " << f<< " "<< r;
}
- 我对他们的来去流动关系不是很清楚,比如说,新的感染者来自于前一天的易感者,新的恢复者来自于昨天的感染者,相应都应该增加或减去。
AC代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long long s,f,r=0,n,tot,fi,ri;double a,b;
cin >> s>>f>>n>>a>>b;
tot = s+f;
for(int i = 1;i <= n;i++)
{
fi = ceil(a*s*f);
ri = ceil(b*f);
r += ri;
if(fi > s)
f += s - ri,s=0;
else
{
f += fi - ri,s -= fi;
}
}
cout << s << " " << f<< " "<< r;
}