субота, 19 липня 2008 р.

Як писати справді короткі програми =)

Після переустановки Вінди треба було настроїти плагіни до топкодерівської арени. Для того, щоб потестити їх відкрив 250 другого діва з СРМ 409(останнього на даний момент).
Суть задачі полягає аж в тому, щоб порахувати кількість одиничних бітів в числі Х. Перший розвязок мав вигляд:

#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <memory>
#include <cctype>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <set>
#include <algorithm>
using namespace std;

#define INF 2000000000
#define FOR(i, a, b) for(i = a; i < b; i++)
#define DFOR(i, a, b) for(i = a - 1; i >= b; i--)
#define ALL(c) (c).begin(),(c).end()

class Stick
{
public:
int pieces(int x)
{
int res=0;
while(x>0)
{
if(x&1)
res++;
x>>=1;
}
return res;
}
};

Багато букоф... Шаблон багато займає. А якщо викинути все лишнє? Буде отак:

struct Stick { int pieces(int x){ return x == 0 ? 0 : pieces(x/2)+x%2; } };

...і все. Навіть інклудів не треба.

Немає коментарів: