TodaysJOI
JOI2009本選にそなえて、JOI2006本選を3時間かけて実践演習。JOI2007ではじめて本選にいったときにちょっと見たときは全然解ける気がしなかった。 1 pairは適切にfirst優先でsecondを次に比較する機能があるので、pairにいれてsortすればおわり。 #include <cstdio> </cstdio>…
こんどは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…
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 | …
今日はここまで。文字列処理むずい。 (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…
関数型にも興味があって、HaskellとSchemeでどっち先にやろうか迷ってたんだけど、Schemeを先にやることにした。 (define (solve price clist count) (if (null? clist) count (if (>= price (car clist)) (solve (- price (car clist)) clist (+ count 1)) …
瞬殺。というかそうじゃないとまずいよね。 #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>…
#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本選問題4の解答チェックプログラムのソースがないっぽいので、自分で作った。もちろん、このソース自身が間違ってる可能性も十分にあるので注意。 #include <error.h> #include <cstdio> #include <vector> #include <algorithm> using namespace std; int main(</algorithm></vector></cstdio></error.h>…
しかしsol_checkが動かないので正答か確認できないいや、Windows台なら動くかもしれないんだけどさ・・・・・・・・まあどちらにせよ、cygwin1.dllはバージョンによって互換性がないらしいので、ソースがあったほうがいいのは確か。ということでJOIのinfoに…
情報オリンピック本選ではコンパイラにCygwinを使うのと、エディタとしてVimが用意されているので、Makefileを書いておくとたぶん便利である。以下は今日組んだMakefile。これがすらすら書けるとたぶん幸せ。ただ、肝心のコンパイルルールを指定していないの…
だいぶRubyグセも抜けていい感じ。やっぱり、おととしとか去年に比べて、だいぶ実力がついてきたという実感はある。今年の本選は2完でボーダーラインぎりぎりみたいなのじゃなくて、むしろ満点を目指す勢いでいきたい。 #include <cstdio> #include <vector> #include <algorithm> using</algorithm></vector></cstdio>…
本選に向けて練習ちう。最近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>…
眠くてコード書けない。以外に罠が多い気がする。眠いだけか。 #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>…
もっと短くできる気がするんだが。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 …
瞬殺で。 #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>
同じ問題をPerlで解いたとき、左辺値を三項演算子で分岐する方法を考えたけど、C++なら左辺値用に参照型(int&)が使えるから、同じ事ができるじゃん!ということで書き直す。 #include <cstdio> #include <algorithm> #include <vector> using namespace std; int main(int argc,char* ar</vector></algorithm></cstdio>…
前やった時、悔しいので解答見ないとか言ったけど、結局見た。まさかとは思ったけど、やっぱり同じ素数でバッサリいけるのか!!!ただし、C++で組み直すのはもはやタルいので、多倍長のPythonで。 #!/usr/bin/python # -*- coding: utf-8 -*- from math imp…
Perlなのでワンライナー挑戦。プログラムコード本体が92文字なので80文字をオーバーしてる。しかし、左辺値tupleならともかく、三項演算子まで左辺値に使えるとか頭おかしい。今回はこれが役に立って良いコードになった。これより短くなるんでしょうか。僕に…
RubyはJavaより遅かった。僕の好きなscanfがあったのは良かった。逆にprintfの書き心地はPythonのほうが上。PerlにせよRubyにせよ、なんでrange operatorは全開区間なのーーーー!?おかしいだろ常考!Pythonのxrangeは半開区間だぞーー! #!/usr/bin/ruby r…
今実感した。Java遅い。JITとかHotSpotとかで改善してるって聞いたけど、普通に遅い。なんで? import java.io.*; import static java.lang.Integer.parseInt; public class t1 { public static void main(String[] args) throws IOException { BufferedRead…
入力処理の短さは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 = […
記事数が足りない。やばい。 #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>
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…
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 …
やっとできたーーーーーーーーーーーっ!いやこれを本番で解くとか不可能だろ。どんだけ必死だったかはソース見ればわかるので多くを語らない。コメント付けたから読めると思う。 /* TASKNO: 5 LANG: C++ NAME: Masaki Hara J */ #include <cstdio> #include <algorithm> #inclu</algorithm></cstdio>…
工事中のフラグを掛け算ではなくビット演算で管理してるのとかは気分。 #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>…
予選当日はいちいち更新キューとか作ってやった気がする。馬鹿だったなあ自分。 #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>…
カードの状態を配列に記憶して、操作ごとに全部のカードを動かすアルゴリズムでもできるけど、今回は操作を配列に記憶して、カードごとに全部の操作を行うイメージのアルゴリズムにしてみた。時間計算量は変わらないし、配列一個で済む分こちらの方がシンプ…
特に言うことはない。 #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>
Perlでワンライナー。ちなみにインタプリタに-l引数を与えていいならあと2bytes減らせる。もっと減らせるという人いたら教えてー! #!/usr/bin/perl for(<>){$a[$_]=1}for(1..30){print$_.$/if(!$a[$_])}