miércoles, 20 de junio de 2012

846 - Steps, UVA

#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#define db(a) \
cout << #a << " = " << a << endl
#define db2(a, b) \
cout << #a << " = " << a << " " << #b << " = " << b << endl
#define inf (1<<30)
#define foreach(it, m) \
for (typeof(m.begin()) it = m.begin(); it != m.end(); it++)
using namespace std;
int main() {
 #ifdef dennisbot
  freopen("in.in", "r", stdin);
  //freopen("ou.out", "w", stdout);
 #endif
 int x, y;
 int t;
 scanf("%d", &t);
 //db(t);
 for (int i = 0; i < t; i++) {
  scanf("%d%d", &x , &y);
  //db2(x, y);
  if (x == y) {
   puts("0");
   continue;
  }
  int n = (int)sqrt(y - x);
  //db(n);
  if (n * n == y - x)
   n = 2 * n - 1;
  else
   if (n * (n + 1) < y - x) {
    n = 2 * n + 1;
   }
   else n = 2 * n;
  /*db2(x, y);
  db(n);*/
  printf("%d\n", n);
 }
 return 0;
}

a good explanation can be found here
Algorithmist

miércoles, 18 de abril de 2012

1406. The Sierpinski Fractal, tju online judge

#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#define db(a) \
cout << #a << " = " << a << endl
#define db2(a, b) \
cout << #a << " = " << a << " " << #b << " = " << b << endl
#define inf (1<<30)
#define foreach(it, m) \
for (typeof(m.begin()) it = m.begin(); it != m.end(); it++)
#define MAX 2048
using namespace std;
char M[MAX][MAX];
void solve(int n, int v, int h) {
 if (n == 1) {
  M[v][h] = '/';
  M[v - 1][h + 1] = '/';
  M[v - 1][h + 2] = '\\';
  M[v][h + 1] = '_';
  M[v][h + 2] = '_';
  M[v][h + 3] = '\\';
 }
 else {
  solve(n - 1, v, h);
  solve(n - 1, v - pow(2., n - 1), h + pow(2., n - 1));
  solve(n - 1, v, h + pow(2., n));
 } 
}
int main() {
 #ifdef dennisbot
  freopen("in.in", "r", stdin);
  freopen("ou.out", "w", stdout);
 #endif
 int n;
 for (int i = 0; i < MAX; i++) {
  for (int j = 0; j < MAX; j++) {
   M[i][j] = ' ';
  }
 }
 string linea = "";
 while (scanf("%d", &n) != EOF && n != 0) {
  for (int i = 0; i < pow(2., n + 1); i++) {
   for (int j = 0; j < pow(2., n + 1); j++) {
    M[i][j] = ' ';
   }
  }
  solve(n, pow(2., n) - 1, 0);
  for (int i = 0; i < pow(2., n) ; i++) {
   linea = "";
   for (int j = 0; j < pow(2., n + 1); j++) {
    if (M[i][j] != ' ') {
     printf("%s%c",linea.c_str(), M[i][j]);
     linea = "";
    }
    else linea += " ";
   }
   puts("");
  }
  puts("");
 }
 return 0;
}

1178. Fractal, tju online judge

#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#define db(a) \
cout << #a << " = " << a << endl
#define db2(a, b) \
cout << #a << " = " << a << " " << #b << " = " << b << endl
#define inf (1<<30)
#define foreach(it, m) \
for (typeof(m.begin()) it = m.begin(); it != m.end(); it++)
#define MAX 729
using namespace std;
char M[MAX][MAX];
void solve(int n, int v, int h) {
 if (n == 1) {
  M[v][h] = 'X';
 }
 else {
  solve(n - 1, v - pow(3., n - 2), h - pow(3., n - 2));
  solve(n - 1, v - pow(3., n - 2), h + pow(3., n - 2));
  solve(n - 1, v, h);
  solve(n - 1, v + pow(3., n - 2), h - pow(3., n - 2));
  solve(n - 1, v + pow(3., n - 2), h + pow(3., n - 2));
 } 
}
int main() {
 #ifdef dennisbot
  freopen("in.in", "r", stdin);
  freopen("ou.out", "w", stdout);
 #endif
 int n = 7;
 for (int i = 0; i < MAX; i++) {
  for (int j = 0; j < MAX; j++) {
   M[i][j] = ' ';
  }
 }
 string linea;
 solve(n, (int)pow(3., n - 1) / 2, (int)pow(3., n - 1) / 2);
 while (scanf("%d", &n) != EOF) {
  if (n == -1) break;
  for (int i = 0; i < pow(3., n - 1) ; i++) {
   linea = "";
   for (int j = 0; j < pow(3., n - 1); j++) {
    if (M[i][j] != 'X')
     linea += " ";
    else {
     printf("%sX", linea.c_str());
     linea = "";
    }
   }
   puts("");
  }
  puts("-");
 }
 return 0;
}