HDU4525+公式

一开始TLE了。。。

 /*
模拟
*/
#include<stdio.h>
#include<math.h>
const int maxn = ;
typedef __int64 int64;
int64 a[ maxn ];
int main(){
int64 k;
int n,k1,k2 ;
int T;
scanf("%d",&T);
int ca = ;
while( T-- ){
scanf("%d%d%d%I64d",&n,&k1,&k2,&k);
int64 sum = ;
for( int i=;i<n;i++ ){
scanf("%I64d",&a[ i ]);
sum += a[ i ];
}
int64 cnt = ;
int flag = -;
while( ){
if( sum>k ) {
flag = ;
break;
}//ok
if( abs(k1+k2)<= ){
flag = -;
break;
}
int64 temp = a[ ];
sum = ;
for( int i=;i<n-;i++ ){
a[ i ] = k1*a[ i ]+k2*a[ i+ ];
sum += a[i];
}
a[ n- ] = k1*a[ n- ]+k2*temp;
sum += a[ n- ];
cnt++;
}
printf("Case #%d: ",ca++);
if( flag== ) printf("%I64d\n",cnt);
else printf("inf\n");
}
return ;
}

后来推出公式

sigma(Ai)*(K1+K2)^t,t表示天数

 /*
模拟
*/
#include<stdio.h>
#include<math.h>
const int maxn = ;
typedef __int64 int64;
int main(){
int ca = ;
int T;
scanf("%d",&T);
while( T-- ){
printf("Case #%d: ",ca++);
int n,k1,k2;
int64 k;
scanf("%d%d%d%I64d",&n,&k1,&k2,&k);
int64 sum = ;
int temp;
for( int i=;i<n;i++ ){
scanf("%d",&temp);
sum += temp;
}
if( sum>k ){
printf("0\n");
continue;
}
if( abs(k1+k2)<= ){
printf("inf\n");
continue;
}
double ans1 = sum*1.0/100000.0;
double ans2 = (k)*1.0/100000.0;
int cnt = ;
while( ans1<=ans2 ){
cnt++;
ans1 = ans1*(k1+k2);
}
printf("%d\n",cnt);
}
return ;
}
上一篇:编写运行最简单的java程序——使用记事本编写java程序


下一篇:用nginx缓存静态文件