NC207572. SumoandVirus
描述
输入描述
第一行包含一个正整数 ,表示一共有T组数据。
第二行包含三个正整数 ,,,含义如题目所描述。
输出描述
输出一个整数代表第n天有几个传染者(指具有传染能力的人)。
示例1
输入:
3 3 4 7 3 4 12 3 4 16
输出:
0 1 3
C++11(clang++ 3.9) 解法, 执行用时: 22ms, 内存消耗: 748K, 提交时间: 2020-06-17 13:30:59
#include<bits/stdc++.h> using namespace std; int i,ans,T,DP[100005]; int main() { long long x,n,m; scanf("%d",&T); while(T--) { scanf("%lld%lld%lld",&x,&m,&n); DP[1]=1,m--,ans=0; for(i=2;i<=n;i++) { ans+=(i>7?DP[i-7]:0)-(i>13?DP[i-13]:0); DP[i]=min(ans*x,m),m-=DP[i]; } printf("%d\n",ans); } }
C++14(g++5.4) 解法, 执行用时: 13ms, 内存消耗: 1376K, 提交时间: 2020-06-06 21:12:47
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ int t;cin>>t; while(t--){ ll x,n,m;cin>>x>>m>>n;ll sb[100005]; ll sum=0;ll all=m-1;sb[1]=1; for(int i=2;i<=n;i++){ if(i-7>=1)sum+=sb[i-7]; if(i-13>=1)sum-=sb[i-13]; sb[i]=min(all,sum*x); all-=sb[i]; } cout<<sum<<"\n"; } }