Pagini recente »
Istoria paginii runda/qwerty4/clasament
|
Istoria paginii runda/contestt_clasele_5_6_7
|
Cod sursă (job #420345)
|
Cod sursă (job #758945)
|
Cod sursă (job #310846)
Cod sursă (job
#310846)
#include <cstdio>
using namespace std;
FILE *f, *g;
typedef long long lint;
int rez;
int scvBuild, scvCost;
int scvCollect;
int target;
void readFile()
{
f = fopen("scv.in", "r");
fscanf(f, "%d%d%d%d", &scvCost, &scvBuild, &scvCollect, &target);
fclose(f);
}
void solve()
{
int cr = 0;
int scv = 1;
rez = 0;
while(cr < target)
{
int need = target - cr;
int get = scv * scvCollect;
int ritmCurent = need / get + ((need % get) != 0);
// printf("+++%d %d\n", rez, cr);
if(cr >= scvCost)
{
if(scvBuild > ritmCurent)
{
cr = target;
rez += ritmCurent;
}
else
{
int rest = need + scvCost - get * scvBuild;
get += scvCollect;
int scvAdd = scvBuild + rest / get + ((rest % get) != 0);
//printf("%d %d\n", scvAdd, ritmCurent);
if(scvAdd <= ritmCurent)
{
rez += scvBuild;
cr -= scvCost;
cr += scv * scvCollect * scvBuild;
scv ++;
}
else
{
cr = target;
rez += ritmCurent;
//rez ++, cr += scv * scvCollect;
}
}
}
else
{
int need = scvCost - cr;
int get = scv * scvCollect;
int ritmscv = need / get + ((need % get) != 0);
if(ritmCurent >= ritmscv)
{
rez += ritmscv;
cr += ritmscv * get;
}
else
{
rez += ritmCurent;
cr = target;
//rez ++, cr += scv * scvCollect;
}
}
}
}
void printFile()
{
g = fopen("scv.out", "w");
fprintf(g, "%d\n", rez);
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}