olimpiyat etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
olimpiyat etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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;
}

17 Haziran 2009 Çarşamba

Olimpiyat sorusu falan

Olimpiyatta çözmeye çalıştığımız bi soru. Bir kümeyi(1..N şeklinde) öyle iki parçaya ayıracaz ki o iki parçanın elemanlarının toplamları eşit olsun. Çözüm güzel oldu, yollayayım dedim. Kimse çözemeyince çözümü anlatan ermana teşekkür etmekteyiz buradan.
#include 
#include 
using namespace std;

int main(){
  int N = 42;
  int top = N*(N+1)/4;
  
  vector< vector > dyn;
  
  for(int i=0;i<=top;i++){
    vector temp;
    dyn.push_back(temp);
    for(int j=0;j<=N;j++) dyn[i].push_back(0);
  }
  dyn[0][0] = 1;
  
  for(int i=1;i<=N;i++){
    for(int j=0;j<=top;j++){
      dyn[j][i] = dyn[j][i-1];
    }
    for(int j=0;j<=top;j++){
      if(i+j<=top)
        dyn[j+i][i] += dyn[j][i-1];
    }
  }
  int res = dyn[top-1][N] / 2;
  cout << res << endl;
  return 0;
}

10 Mayıs 2009 Pazar

Mazoşizmin übergeek versiyonu

1.5 ay normal okul derslerine girmeyince insan bu zıbıdıkların ne kadar sıkıcı olduğunu unutuyor. Geçen hafta bunun ve baharın etkisiyle geçmek bilmedi, şu anda şafak sayıyorum ve sanırım 18 iş günü kaldı bitmesine(son haftayı adamdan saymıyorum). Eğer 18 mayısı(kaynar o kaynar) ve 5 haziranı(son sınavdan sonraki gün, cuma) da saymazsak 16'ya düşebiliyor. Neyse, bu aşırı sıkıcı derslerde olayı mazoşizme döktüm ama tabi ki kendi usulümde. Dedim Bilgisayar Olimpiyatı 1.aşamada nasıl olsa bizi "bu kod ne yazdırır ülen?" sorularıyla interpreter olarak kullanıyorlar, ben de kendimi compiler olarak kullanıp basit c zıvırlarını derste elle compile ederim. Hem biraz sıkıntıyı alıyor, hem de baya zaman alıyor. Oh ne güzel. Duyan sıyırdığımı düşünüyor ama o kadarı olacak artık, dimi?

27 Nisan 2009 Pazartesi

Mayıs Sınavı ve ardından gelen kafa izni

Ulusal Bilgisayar Olimpiyatı 1. aşama sınavına girdim geçen cumartesi günü. Oldukça iyi geçti gibi, şu anda "onaylanmış" durumda 3 yanlışım var, bir o kadar daha çıkacağını düşünsek bile rahat rahat geçiyorum. Neyse, böyle büyükçene bir şeyden sonra okul da sağolsun bizi kırmadı 1 hafta tatil yapıyoruz, kafa izni de denebilir, bu arada blogcan da hafiften kafa iznine çıkabilir. Zıbıdıkla kalın(güzel oldu bu da böyle, esen kalın gibi)