TodaysJOI

JOI2006本選 一括@C++

JOI2009本選にそなえて、JOI2006本選を3時間かけて実践演習。JOI2007ではじめて本選にいったときにちょっと見たときは全然解ける気がしなかった。 1 pairは適切にfirst優先でsecondを次に比較する機能があるので、pairにいれてsortすればおわり。 #include <cstdio> </cstdio>…

JOI2008予選 問題1@Haskell

こんどはHaskellでやってみた。 solve :: Int -> [Int] -> Int -> Int solve price [] count = count solve price clist count | price >= (head clist) = solve (price - (head clist)) clist (count + 1) | otherwise = solve price (tail clist) count ma…

JOI2008予選 問題2@Haskell

countSubstringSub :: String -> String -> Int -> Int countSubstringSub _ [] count = count + 1 countSubstringSub [] _ count = count countSubstringSub str sub count | (head str) == (head sub) = countSubstringSub (tail str) (tail sub) count | …

JOI2008予選 問題2@Scheme

今日はここまで。文字列処理むずい。 (define (count-substring str sub) (define (count-substring-sub2 strl subl count) (if (null? subl) (+ count 1) (if (null? strl) count (if (char=? (car strl) (car subl)) (count-substring-sub2 (cdr strl) (cd…

JOI2008予選 問題1@Scheme

関数型にも興味があって、HaskellとSchemeでどっち先にやろうか迷ってたんだけど、Schemeを先にやることにした。 (define (solve price clist count) (if (null? clist) count (if (>= price (car clist)) (solve (- price (car clist)) clist (+ count 1)) …

JOI2007本選 問題1@C++

瞬殺。というかそうじゃないとまずいよね。 #include <climits> #include <cstdio> #include <vector> #include <algorithm> using namespace std; int main(int argc, char *argv[], char *envp[]) { #ifdef DEBUG FILE *in = stdin; FILE *out = stdout; #else FILE *in = fopen("input.txt", "</algorithm></vector></cstdio></climits>…

JOI2007本選 問題5@C++

#include <cstdio> #include <vector> #include <algorithm> using namespace std; int gcm(int a, int b) { if(a < 0) a = -a; if(b < 0) b = -b; while(b>0) { int tmp = a % b; a = b; b = tmp; } return a; } class stick { public: int len0; int len1; stick *child0; stick *chil</algorithm></vector></cstdio>…

JOI2007本選sol_check@C++

前回記事で書いたとおり、JOI2007本選問題4の解答チェックプログラムのソースがないっぽいので、自分で作った。もちろん、このソース自身が間違ってる可能性も十分にあるので注意。 #include <error.h> #include <cstdio> #include <vector> #include <algorithm> using namespace std; int main(</algorithm></vector></cstdio></error.h>…

JOI2007本選 問題4@C++

しかしsol_checkが動かないので正答か確認できないいや、Windows台なら動くかもしれないんだけどさ・・・・・・・・まあどちらにせよ、cygwin1.dllはバージョンによって互換性がないらしいので、ソースがあったほうがいいのは確か。ということでJOIのinfoに…

Makefile

情報オリンピック本選ではコンパイラにCygwinを使うのと、エディタとしてVimが用意されているので、Makefileを書いておくとたぶん便利である。以下は今日組んだMakefile。これがすらすら書けるとたぶん幸せ。ただ、肝心のコンパイルルールを指定していないの…

JOI2007本選 問題3@C++

だいぶRubyグセも抜けていい感じ。やっぱり、おととしとか去年に比べて、だいぶ実力がついてきたという実感はある。今年の本選は2完でボーダーラインぎりぎりみたいなのじゃなくて、むしろ満点を目指す勢いでいきたい。 #include <cstdio> #include <vector> #include <algorithm> using</algorithm></vector></cstdio>…

JOI2007本選 問題2@C++

本選に向けて練習ちう。最近Rubyばっか触っていたのでC++はお久しぶり状態。少し馴らさないとやばい。 #include <cstdio> #include <vector> #include <algorithm> using namespace std; int main(int argc, char *argv[], char *envp[]) { #ifdef DEBUG FILE *in = stdin; FILE *out = </algorithm></vector></cstdio>…

JOI2006予選 問題4@C++(-66)

眠くてコード書けない。以外に罠が多い気がする。眠いだけか。 #include <climits> #include <cstdio> #include <algorithm> #include <vector> using namespace std; int n,m; vector<int> cups; int pcount_limit; int pcount; void move_cups(int depth,int dest) { if(pcount>pcount_limit) { pcou</int></vector></algorithm></cstdio></climits>…

JOI2006予選 問題3@Perl(-65)

もっと短くできる気がするんだが。mapは左辺値として使えないのかなあ。 #!/usr/bin/perl %t=(N=>[0,1,5,4,0],E=>[0,3,5,2,0],W=>[0,2,5,3,0],S=>[0,4,5,1,0],R=>[1,2,4,3,1],L=>[1,3,4,2,1]); @c=1..6; $s=1; $n=<>; for(1..$n) { $_=substr<>,0,1; if(not …

JOI2006予選 問題2@C++(-60)

瞬殺で。 #include <cstdio> #include <algorithm> #include <vector> using namespace std; int main(int argc,char* argv[],char* envp[]) { int n; scanf("%d\n",&n); vector<char> table(256); for(int i=0;i<256;i++) {table[i]=i;} for(int i=0;i</char></vector></algorithm></cstdio>

JOI2006予選 問題1@C++(簡潔になったよ!)(-58)

同じ問題をPerlで解いたとき、左辺値を三項演算子で分岐する方法を考えたけど、C++なら左辺値用に参照型(int&)が使えるから、同じ事ができるじゃん!ということで書き直す。 #include <cstdio> #include <algorithm> #include <vector> using namespace std; int main(int argc,char* ar</vector></algorithm></cstdio>…

JOI2006模擬試験1 問題5@Python(-57)

前やった時、悔しいので解答見ないとか言ったけど、結局見た。まさかとは思ったけど、やっぱり同じ素数でバッサリいけるのか!!!ただし、C++で組み直すのはもはやタルいので、多倍長のPythonで。 #!/usr/bin/python # -*- coding: utf-8 -*- from math imp…

JOI2006予選1 問題1@Perl(-54)

Perlなのでワンライナー挑戦。プログラムコード本体が92文字なので80文字をオーバーしてる。しかし、左辺値tupleならともかく、三項演算子まで左辺値に使えるとか頭おかしい。今回はこれが役に立って良いコードになった。これより短くなるんでしょうか。僕に…

JOI2006予選1 問題1@Ruby(-53)

RubyはJavaより遅かった。僕の好きなscanfがあったのは良かった。逆にprintfの書き心地はPythonのほうが上。PerlにせよRubyにせよ、なんでrange operatorは全開区間なのーーーー!?おかしいだろ常考!Pythonのxrangeは半開区間だぞーー! #!/usr/bin/ruby r…

JOI2006予選1 問題1@Java(-52)

今実感した。Java遅い。JITとかHotSpotとかで改善してるって聞いたけど、普通に遅い。なんで? import java.io.*; import static java.lang.Integer.parseInt; public class t1 { public static void main(String[] args) throws IOException { BufferedRead…

JOI2006予選1 問題1@Python(-51)

入力処理の短さはCのscanfとC++のcinが最強。普通splitとかparseIntしなきゃいけないし。それを除けばPythonは短く書けるほうだよなあ。 #!/usr/bin/python # -*- coding: utf-8 -*- n = int(raw_input()) sum_a = 0 sum_b = 0 for i in xrange(n): a, b = […

JOI2006予選1 問題1@C++(-50)

記事数が足りない。やばい。 #include <cstdio> #include <algorithm> #include <vector> using namespace std; int main(int argc,char* argv[]) { int n; scanf("%d\n",&n); int sum_a=0; int sum_b=0; for(int i=0;i<n;i++) { int a,b; scanf("%d %d\n",&a,&b); if(a>b) { sum_a+=a+b; } else if(a==b) { sum_a+=a; sum_b+=b; } else …</n;i++)></vector></algorithm></cstdio>

JOI2006模擬試験1 問題1@Java(-47)

200記事いけなくなりそうなので、記事稼ぎ。 import java.io.*; import static java.lang.Integer.parseInt; public class t1 { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReade…

JOI2006模擬試験1 問題1@Python(-48)

bとcの大小検査しなくてよかったことに今頃気づいた。 #!/usr/bin/python # -*- coding: utf-8 -*- count_all = 0 count_right = 0 count_less = 0 count_more = 0 while True: a, b, c = [int(x) for x in raw_input().split(' ')] if(a < b): a, b = b, a …

JOI2008本選 問題5@C++(-31)

やっとできたーーーーーーーーーーーっ!いやこれを本番で解くとか不可能だろ。どんだけ必死だったかはソース見ればわかるので多くを語らない。コメント付けたから読めると思う。 /* TASKNO: 5 LANG: C++ NAME: Masaki Hara J */ #include <cstdio> #include <algorithm> #inclu</algorithm></cstdio>…

JOI2007予選 問題6@C++(-21)

工事中のフラグを掛け算ではなくビット演算で管理してるのとかは気分。 #include <climits> #include <cstdio> #include <algorithm> #include <vector> using namespace std; int main(int argc,char* argv[]) { int a,b; scanf("%d %d\n",&a,&b); vector<vector<int> > mask_map(a+1,vector<int>(b+1,INT_MAX)); </int></vector<int></vector></algorithm></cstdio></climits>…

JOI2007予選 問題5@C++(-20)

予選当日はいちいち更新キューとか作ってやった気がする。馬鹿だったなあ自分。 #include <cstdio> #include <algorithm> #include <vector> using namespace std; struct item_pair { int battery; int motor; int cable; item_pair(int battery,int motor,int cable) : battery(batter</vector></algorithm></cstdio>…

JOI2007予選 問題4@C++(-18)

カードの状態を配列に記憶して、操作ごとに全部のカードを動かすアルゴリズムでもできるけど、今回は操作を配列に記憶して、カードごとに全部の操作を行うイメージのアルゴリズムにしてみた。時間計算量は変わらないし、配列一個で済む分こちらの方がシンプ…

JOI2007予選 問題3@C++(-12)

特に言うことはない。 #include <cstdio> #include <algorithm> #include <vector> using namespace std; int main(int argc,char* argv[]) { for(;;) { int dex=getchar()-'A'; if(dex<0||dex>=26) break; dex=(dex+23)%26; putchar(dex+'A'); } putchar('\n'); return 0; }</vector></algorithm></cstdio>

JOI2007予選 問題2@Perl(-10)

Perlでワンライナー。ちなみにインタプリタに-l引数を与えていいならあと2bytes減らせる。もっと減らせるという人いたら教えてー! #!/usr/bin/perl for(<>){$a[$_]=1}for(1..30){print$_.$/if(!$a[$_])}