#include #include #include #include #include using namespace std; using ll=long long; priority_queue > que; int min_u(int&m, int v) { if(m==-1 || m>v) { m=v; return 1; } return 0; } void push(int t, int ct) { if(t<=0) return; que.push(make_pair(-t, ct)); } int pop(int& t, int& ct) { if(que.empty()) return 0; t=-que.top().first; ct=que.top().second; que.pop(); return 1; } void que_dump(void) { auto q=que; printf("dump\n"); for(;!q.empty();) { printf("t=%d ct=%d\n", -q.top().first, q.top().second); q.pop(); } printf("\n"); } ll solve(int n, int t) { ll ans=n; ll inc=n*2; int ct=0, nt, nc; while(pop(nt, nc)) { if(nt>t) break; ans+=inc*(nt-ct); inc--; if(nc) ans--; ct=nt; } ans+=inc*(t-ct); while(pop(nt, nc)); return ans; } int main(void) { vector x; int n, d, t; int i, j, y, ay, c, cp_min, cp_min_t=0, cn_min; while(scanf("%d%d%d", &n ,&d, &t)==3) { x.resize(n); for(i=0;i0;i--) { if(x[i]==x[i-1]) x.erase(x.begin()+i); } n=x.size(); for(i=0;i0) { if(min_u(cp_min, c)) { cp_min_t=(ay%2); } } else { min_u(cn_min, c); } } push(cp_min, cp_min_t); push(cn_min, 1); } printf("%lld\n", solve(n, t)); } return 0; }