スーパーコン本戦とかPCK予選(落ち)とか色々あったけど過去のことは忘れたな
コードフェスティバルの予選が合ったらしい(参加権ない)
予選Aは20位で1ページ目に乗ってて実力に見合わない
予選B
- 直前にキーボードの3(#)キーが壊れる
- 治らない
- なんにも準備してない
- スタート
- シャープ打てないとtweetしようとしたところで「しゃーぷ」を変換すれば出来る事が判明
- A問題FA狙うも9秒ACという人外が現れて引退
- MAXとるだけっぽい(A00:20AC)
- B問題
- 足すだけっぽい
- 書く
- ACやったね(B02:43AC)
- 順位表を確認
- D問題ACしてる人がいるからそっちを先に解こう
- Dが一番簡単という風潮??
- DP?
- 書く
- 問題誤読、なぜか増加部分列的な感じだと思ってた
- 書く
- 書けない
- 更に問題誤読
- 一瞬セグ木が頭の片隅に浮かぶけどオーダー大丈夫か?
- やめよう
- C問題読む
- 変な解法しそうだなあ
- どうせC問題
- 文字の数数えて使わないといけない数を求める
- 良い感じにやる
- 反例なんて考えられない頭だからこのまま提出
- 意外にもACしてる(C36:26AC)
- 順位逝ってしまうから保険欲しい
- 普通に数えるやつを書く(D38:59TLE部分点30)
- セグ木のやつO(nlog^2n)か
- O(10^8)くらい??
- んーー(関数電卓紛失)
- 書く
- にぶたんばぐる
- にぶたん世界一書けない
- にぶたんした後の微妙な足し算めんどい
- 番兵置こう(いらなかった)
- 提出(D63:21AC)
- 1.5sかかってる
- cinにしたらどうなるのだろう
- TLE
- 終わり(44位)
Code
A
#include<bits/stdc++.h> using namespace std; int main(){ int a, b; cin >> a >> b; cout << max( a, b) << endl; }B
#include<bits/stdc++.h> using namespace std; typedef long long int64; int main(){ int n, k, a[100000]; cin >> n >> k; int64 sum = 0; for(int i = 0; i < n; i++){ cin >> a[i]; sum += a[i]; if(k <= sum){ cout << i + 1 << endl; return(0); } } }C
#include<bits/stdc++.h> using namespace std; typedef pair< int , int > Pi; int main(){ string s1, s2, s3; cin >> s1 >> s2 >> s3; int cnt1[26] = {}, cnt2[26] = {}, cnt3[26] = {}; for(int i = 0; i < 26; i++) cnt1[i] += count(s1.begin(), s1.end(), (char)('A' + i)); for(int i = 0; i < 26; i++) cnt2[i] += count(s2.begin(), s2.end(), (char)('A' + i)); for(int i = 0; i < 26; i++) cnt3[i] += count(s3.begin(), s3.end(), (char)('A' + i)); int need1 = 0, need2 = 0; bool flag = true; for(int i = 0; i < 26; i++){ if(cnt2[i] < cnt3[i]){ need1 += cnt3[i] - cnt2[i]; if(cnt2[i] + cnt1[i] < cnt3[i]) flag = false; } } for(int i = 0; i < 26; i++){ if(cnt1[i] < cnt3[i]){ need2 += cnt3[i] - cnt1[i]; } } if(need1 > s1.size() / 2 || need2 > s2.size() / 2 || !flag) cout << "NO" << endl; else cout << "YES" << endl; }D
#include<bits/stdc++.h> using namespace std; typedef long long int64; typedef pair< int , int > Pi; int h[100002]; #define MAX 400000 int n, seg[MAX * 2 - 1]; const int INF = 1 << 30; void update( int i, int x){ i += n - 1; seg[i] = x; while(i > 0){ i = ( i - 1 ) / 2; seg[i] = max( seg[i * 2 + 1], seg[i * 2 + 2]); } } int query( int a, int b, int k = 0, int l = 0, int r = n){ if( r <= a || b <= l ) return -1; if( a <= l && r <= b ) return seg[k]; int vl = query( a, b, k * 2 + 1, l, (l + r) / 2); int vr = query( a, b, k * 2 + 2, (l + r) / 2, r); return max( vl, vr); } void init( int& size){ n = 1; while( n < size ) n *= 2; } int main(){ int size; scanf("%d", &size); init(size); h[0] = -INF; for(int i = 1; i <= size; i++){ scanf("%d", &h[i]); update( i, h[i]); } h[size + 1] = INF; for(int i = 1; i <= size; i++){ int cost = 0; int row = 0, high = i - 1; while(high - row > 0){ int mid = (high + row + 1) >> 1; if(query(mid, high + 1) > h[i]){ row = mid; } else { high = mid - 1; } } cost += i - high - 1; row = i + 1, high = size + 1; while(high - row > 0){ int mid = (high + row) / 2; if(query( row, mid + 1) > h[i]){ high = mid; } else { row = mid + 1; } } cost += row - i - 1; printf("%d\n", cost); } }
0 件のコメント:
コメントを投稿