Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Solve using your language of choice

Name: Anonymous 2011-04-13 9:05

http://i56.tinypic.com/9qlh52.png

my solution in Java

import java.io.*;
import java.util.*;

public class ProblemF {
   
    public static void main(String[] args) throws Exception {
        BufferedReader fileIn = new BufferedReader(new FileReader("f.in"));
       
        String line = null;
        while ((line = fileIn.readLine()) != null) {
            int number = Integer.parseInt(line);
            if (number <= 0 || number >= 100000000) {
                break;
            }
            System.out.println(number +" : "+ getOrderedPairs(number));
        }
    }
   
    public static String getOrderedPairs(int number) {
        StringBuffer buff = new StringBuffer();
       
        int pairCount = 0;
        for (int i = 1; i <= number; i++) {
            for (int j = i; j <= number; j++) {
                int sum = getSummation(i, j);
                if (sum == number) {
                    pairCount++;
                    buff.append(" ("+ i +","+ j +")");
                    break;
                } else if (sum > number) {
                    break;
                }
            }
        }
       
        buff.insert(0, pairCount +" :");
       
        return buff.toString();
    }
   
    public static int getSummation(int tempA, int tempB) {
        int a = tempA - 1;
        int b = tempB;
        int sumB = ((b * (b + 1)) / 2);
        int sumA = ((a * (a + 1)) / 2);
        return sumB - sumA;
    }
   
}

Name: Anonymous 2011-04-13 13:00

>>8
Pig disgusting Lisp-2 mod.

>>13-22
See >>10

#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>

static void solve(uint_fast32_t n)
{
  uint_fast32_t a, b, x;
  a=b=x=0;
  while(b<=n) {
    if(x == n) {
      printf("%"PRIuFAST32", %"PRIuFAST32"\n", a, b);
    }
    if(x >= n) {
      x-=a;
      a++;
    } else {
      b++;
      x+=b;
    }
  }
}

int main(int argc, char **argv)
{
  if(argc != 2) {
    fprintf(stderr, "Usage: %s n\n", argv[0]);
    return EXIT_FAILURE;
  }

  uint_fast32_t n;
  if(sscanf(argv[1], "%"SCNuFAST32, &n) != 1) {
    fprintf(stderr, "\"%s\" is not a valid number\n", argv[1]);
    return EXIT_FAILURE;
  }

  solve(n);
}


$ gcc -v 2>&1 | tail -n1
gcc version 4.5.2 20110127 (prerelease) (GCC)
$ gcc -std=c99 -Wall -Wextra -O3 -march=native solve.c -o solve
$ time ./solve 99999999 > /dev/null

real    0m0.273s
user    0m0.233s
sys    0m0.013s


$ clang --version | head -n1
clang version 2.9 (tags/RELEASE_29/final)
$ clang -std=c99 -Wall -Wextra -O3 -march=native solve.c -o solve
$ time ./solve 99999999 > /dev/null

real    0m0.446s
user    0m0.420s
sys    0m0.007s


It seems llvm spilled some registers in the inner loop. gcc just repeats a CMP (CMP/JCC/CMP/JCC -> CMP/JCC/JCC, maybe not even faster).

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List