(题面还不能看,晚点加上题面)
思路:
suma=(a1+a2+。。。+ak)
sumf=(f1+f2+。。。+f3)
①n<=k,ans=a1+a2+。。。+an;
②n<=2k,ans=suma+f1+f2+。。。+f(n-k);
③n>2k,ans=suma+((n-k)/k)*sumf+( f1+f2+。。。+f( (n-k)%k ) ).
注意取模就行
AC代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=1e6+7; 5 ll mod=1e9+7; 6 ll a[maxn],f[maxn]; 7 int main() 8 { 9 int t; 10 scanf("%d",&t); 11 while(t--){ 12 int k; 13 ll n,suma=0,sumf=0,k2; 14 scanf("%d",&k); 15 k2=ll(k); 16 scanf("%lld",&n); 17 for(int i=1;i<=k;++i) 18 scanf("%lld",&a[i]),suma=(suma+a[i])%mod; 19 for(int i=1;i<=k;++i) 20 scanf("%lld",&f[i]),sumf=(sumf+f[i])%mod; 21 ll ans=0; 22 if(k2>=n){ 23 for(int i=1;i<=int(n);++i) 24 ans=(ans+a[i])%mod; 25 printf("%lld\n",ans%mod); 26 } 27 else{ 28 ans=suma%mod; 29 ll nu=((n-k2)/k2); 30 int len=n-nu*k2-k2; 31 nu%=mod; 32 ans=(nu*sumf+ans)%mod; 33 for(int i=1;i<=len;++i) 34 ans=(ans+f[i])%mod; 35 printf("%lld\n",ans%mod); 36 } 37 } 38 return 0; 39 } 40 /* 41 2 42 2 100000000000000000 43 6 5 5 5 44 */