First design a bruteforce solution with small input in mind. It should be able to compute answers for 100 101 etc. Now sequentially examine all the answers you'll find a pattern. The solution to every i-th even number is the sum of all numbers till i+1. It also applies to all odd numbers. Such as 2, 1st even number, so result is 1+2, till 2nd number And for 3, 1st odd number, it's the same. Just find the i using i = (n/2) and use i*(i+1)/2 formula for the result.
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <vector> #include <list> #include <iostream> #include <sstream> #include <fstream> #include <algorithm> #include <queue> #include <stack> using namespace std; typedef long long lint; lint res[1000010]; int main ( void ) { lint i, j, k, n, cnt, ser; res[0] = 1LL; res[1] = 1LL; for (i=2, ser=2LL ; i<=1000001LL ; i+=2, ser++) { res[i] = (res[i-1]+ser); res[i+1] = res[i]; } while ( cin >> n ) { cout << res[n] << endl; } return 0; }
No comments:
Post a Comment
Post your comment here. If you want to say something about programming problems, scripts, software etc, please try to be as descriptive as possible.