21 Haziran 2009 Pazar

Olimpiyat sorusu falan - bi başkası

Olimpiyat kampındayken kod yazma dışında pek ilgi çekici bişey olmadığı için blog da gayet boş kalabiliyor. Arada sırada yaptığım çözümleri beğenirsem yolluyorum işte. Şurada USACO training şeyindeki numtri sorusunun çözümü;
/* 
ID: kuzux921
PROG: numtri
LANG: C++
*/

#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
  ofstream out ("numtri.out");
  ifstream in ("numtri.in");
  
  int rows; in >> rows;
  
  vector < vector<int> > triangle;
  for(int i=0;i<rows;i++){
    vector<int> tmp;
    triangle.push_back(tmp);
    for(int j=0;j<=i;j++){
      int n; in >> n;
      triangle[i].push_back(n);
    }
  }
  
  for(int i=triangle.size()-2;i>=0;i--){
    for(int j=0;j<=i;j++){
      triangle[i][j] += max(triangle[i+1][j],triangle[i+1][j+1]);
    }
  }
  
  out << triangle[0][0] << endl;
  
  return 0;
}

Bu da yine aynı yerden frac1 sorusu;
/* 
ID: kuzux921
PROG: frac1
LANG: C++
*/
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

struct Fraction{
  int num;
  int den;
};

inline double value(const Fraction& frac){
  return ((double)frac.num)/((double)frac.den);
}

void search(int limit, vector< vector<bool> > matrix, vector<Fraction>& res){
  Fraction def; def.den = def.num = 1;
  res.push_back(def);
  def.num = 0;
  res.push_back(def);
  
  for(int i=2;i<=limit;i++){
    for(int j=1;j<i;j++){
      if(!matrix[i][j]) continue;
      Fraction tmp;
      tmp.num = j;
      tmp.den = i;
      res.push_back(tmp);
      for(int k=2;k<=limit/i;k++){
        matrix[i*k][j*k] = false;
      }
    }
  }
}

bool sortr(const Fraction& f1, const Fraction& f2){
  return value(f1) < value(f2);
}

int main(){
  ofstream out ("frac1.out");
  ifstream in ("frac1.in");
  int limit; in >> limit;
  
  vector<Fraction> res;
  vector< vector<bool> > matrix;
  matrix.resize(limit+1);
  for(int i=2;i<=limit;i++){
    matrix[i].resize(i+1);
    for(int j=1;j<i;j++){
      matrix[i][j] = true;
    }
  }
  
  search(limit,matrix,res);
  sort(res.begin(),res.end(),sortr);
  
  for(unsigned int i=0;i<res.size();i++) out << res[i].num << "/" << res[i].den << endl;
  
  return 0;
}

Hiç yorum yok:

Yorum Gönder