intさわだんのBlack History

刹那的レジェンドになりたい。

JOI本選問題

第6回日本情報オリンピック 本選 「最軽量のモビール」

ひとつ前の「最悪の記者」のほうが少し難易度が高いきがする。部分点解法全く思いつきませんでしたすいません。 満点解法 深さ優先探索(DFS)をする. まず一番上にあるモビール(?)をもとめる。 そのモビールを関数dfsに投げる 関数dfsはそのモビールに必要…

第6回日本情報オリンピック 本選 「最悪の記者」

部分点解法 N個のチームの順位のつけ方をすべて試し、適する順位を求める。計算量はO(N!)であり、これでは全体の30%しか得点を得られない。 満点解法 トポロジカルソートをする。 計算量はO(N + M).これについてはJOIの解説と全く同じなのでそちらを参照して…

第6回日本情報オリンピック 本選 「最古の遺跡」

満点解法より効率の悪い解法を考えるほうが難しいと感じた。 部分点解法 4重ループで4本の柱を選び、それが正方形か調べその面積の最大値を求める。O(N).でもこんな解法を本気で考える人はいない気がするな・・・ 満点解法 bool型の配列などで、座標を指定…

第6回日本情報オリンピック 本選 「最長の階段」

ごり押しで何とかいけそうな問題。ソートをして少し考察しましょう。JOIの解説の通りにバケットソートを用いて解きました。問題文の言われたとおりにやっただけなので解説は省かせてもらいます。 #include <cstdio> #include <algorithm> using namespace std; int main(){ int </algorithm></cstdio>…

第6回日本情報オリンピック 本選 「最大の和」

部分点解法についてのソースも乗のっけていこうと思いましたが、AOJで部分点採点してくれないことに気が付いたのでやめます。すいません。 部分点解法 a[i]からa[i+k-1]までの和をfor文で求め、これを0 オーダーはO(NK). 参考までに↓ int max = 0 for(int i …

JOI本選過去問 第8回 日本情報オリンピック本選 5問目 認証レベル

なんとか通りました。つかれた。問題文はこちら世界スパッゲッティソース大会で決勝にいけそうなソースです。joi本選の練習も兼ねて、mapとかvectorとかqueueとかpairとかいろんなの使ってみました。 なのでとても複雑になってしまった。。。実行時間もそこ…

JOI本選過去問 第8回 日本情報オリンピック本選 4問目 散歩

問題分は「AOJ 0541」とでもググってください。 DPでやりました。 N-1回目までの散歩でそれぞれ何回その場所に通るか回数をdpに入れていき、その合計が偶数なら何もしない、奇数なら「南」「東」を反転させ、N回目をシミュレーションしていき感じです。 おそ…

JOI本選過去問 第11回 日本情報オリンピック本選 3問目 夜店

問題はこちらなんかいろいろめんどくさかった。 メモリに気をつけよう(節約しました 細かいとこばぐんないようにしよう。 あとは気合 ソースとても汚いけどまわりと比較して実行時間そこまで遅くないので吉としよう。 #include <cstdio> #include <algorithm> #include <string.h> using </string.h></algorithm></cstdio>…

JOI本選過去問 第8回 日本情報オリンピック本選 2問目 ピザ

問題文はこちら。 瞬殺問題。 二分探索地味に初めてでした。 一発ACはたのしい。 #include <cstdio> #include <algorithm> #include <vector> using namespace std; int main(){ while(1){ long int d = 0; long int n = 0; int m = 0; long int ans = 0; vector<long> dat; vector<long>::iterator </long></long></vector></algorithm></cstdio>…

JOI本選過去問 第11回 日本情報オリンピック本選 2問目 たのしいカードゲーム

どう見ても解法わるい #include <cstdio> #include <algorithm> using namespace std; int alen = 0,blen = 0; short ans = 0; short a[5003] = {0}; short b[5003] = {0}; short dp[5003][5003] = {0}; int main(){ scanf("%d %d ",&alen,&blen); for(int i = 0;i < alen;i++){</algorithm></cstdio>…

JOI本選過去問 第10回 日本情報オリンピック本選 一問目 惑星探査

問題文はこちら。たぶんやるだけ。もっともっといい解法がある気が... そーす汚すぎて何も言えないです。 #include <cstdio> using namespace std; int n = 0,m = 0; long k = 0; char tizu[1003][1003]; int dp[1003][1003][3] = {0}; int func(char sss){ int r = </cstdio>…

JOI本選過去問 第6回 日本情報オリンピック本選 3問目 最古の遺跡

問題文はこちら 長年頭の中では解けていたけど、実装していなかった問題。解けて頭がすっきりした。 解説の効率のよい解法で計算量がO(n^2 log n)と書いていたのをみて、「これはO(n^2/2)でいけるのでは」と思って実装してみた。やるだけでとてもかんたんだ…

JOI本選過去問 第11回 日本情報オリンピック本選 一問目 JJOOII

はい。おそらく誰でも解けるでしょう。 問題文はこちら。 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; long n = 0; char s[1000003]; long int ans = 0; int main(){ scanf("%s",s); n = strlen(s); for(long i = 0;i < n;i++){ if(s[i] != 'J'){ c</cstring></algorithm></cstdio>…

JOI本選過去問 第8回 日本情報オリンピック本選 一問目 IOIOI

やるだけちょっと工夫しないとTLEなるのかな?問題文はこちら #include <cstdio> #include <algorithm> using namespace std; long n,m; long p = 0; char s[1000003]; int main(){ while(19){ long long ans = 0; scanf("%ld",&n); if(n == 0) break; scanf("%ld",&m); scanf("</algorithm></cstdio>…