Particle

競技プログラミングについての雑記

Topcoder

SRM578

250 あるgooseから、マンハッタン距離がdist以下の鳥は必ずgooseになるので、距離がdist以下の鳥は全て同じ種類になります。UnionFindを使うとどのように別れるかが分かります。それぞれのグループで鳥の個数が偶数のものと奇数のもので分けて数えて、偶数の…

SRM 577

250 自分の部屋にいる人のレーティングの平均の期待値を求める問題です。与えられる文字列を連結する。部屋の数R = (n+20-1)/20 であり、(n-1)%R+1 人が最後に部屋分けされる。(このとき、1つの部屋に振り分けられる人数は20よりだいぶ小さくなることもある…

SRM 572

250 実験すると、oldpassword.size()-Kおきに同じになる必要があると分かるから、数える。 int minChange(string s, int K) { int n = s.size(); int p = n-K,ans = 0; if(p>=K){//elseの方だけで十分 for(int i = 0; i < K; i++){ if(s[i]!=s[i+p])ans++; }…

SRM397 Div2

Easy ソース class BreakingTheCode{ public: string decodingEncoding(string s, string t) { string ans; if('0'<=t[0]&&t[0]<='9'){ for(int i = 1; i < t.size(); i+=2){ int a = 10*(t[i-1]-'0')+t[i]-'0'; ans+=s[a-1]; } }else { for(int i = 0; i < …

SRM554 Div1

今回も結果が良くないのに、challengeのお陰で、ratingが上がりました。 Easy 解法 このソースのように場合分けする。 赤と青のレンガの高さが同じ時は、積める個数を数える。 違うときは、赤が1個多い時と、青が1個多い時を区別して数える。 ソース class T…

SRM552 Div1

問題が面白い回でした。Easy(Failed System Test/250) 解法自体は難しくないのですが、誤差やオーバーフローに注意しないと間違えます。すべての色で必要な球の個数がN*(N+1)/6個(ただし、小数点以下切り捨て)であると考えて、作れるだけ作ったあと、不足し…

SRM551 Div1

今回は問題が簡単でした。Easy(123.68/250) 左から右に動かした時に、ある点から左に繋がっているアルファベットの個数と、右から左に動かした時に、ある点から右に繋がっているアルファベットの個数を計算して、合計が大きくなるものを求めました。 int l[2…

SRM544 Div1

0ptでした。Easy 票の合計を固定してから、票が少ない時の合計と多い時の合計を調べて、最初の仮定が成り立つか調べる。 同じ数だけ票が入る人が複数人いるときにも、成り立つということが分からなかったけど、テストは通りました。 class ElectionFraudDiv1…

SRM543 Div1

Easy(93.96/250) 数字の後ろにLLつけ忘れて、時間がかかりすぎてしまいました。難しそうでも、mod 4 で分類する解法の方が良かったみたいです。 typedef long long ll; class EllysXors{ public: ll getXor(ll L, ll R) { ll ans = 0; ll a = (R-L)%4; if(L%…

SRM541 Div2

9thでした。Hardが簡単めだったので、解きたかったです。Easy(215.96/250) わぁい撃墜 あかり撃墜大好き(Easyでは撃墜していません) 色々面倒なだけ。 class AkariDaisukiDiv2{ public: int countTuples(string s) { int len = s.size(),ans=0; for(int i = …

SRM540 Div2

Easy(122.18/250) 条件を注意して読みましょう。最初からちゃんと読んでいれば、余裕で240点代出せます。 バグ対策[要出典]にソートした人はあまりいなさそうでした。 #include <algorithm> #include <cmath> #include <ctime> #include <iostream> #include <string> #include <vector> using namespace std; cl</vector></string></iostream></ctime></cmath></algorithm>…

SRM 539Div2

Div1は550を誰かが解かないとノーコン(Div1)になるらしいです(2012/04/15 15:01) 問題見てみたいけど、Div2だと見れないみたいです。practiceに入りました。 Easy(174.03 / 250) 遺伝子の情報が与えられて、1つの家族として考えられるものの中で、最も人数の…

SRM538 Div2

一回記事消してしまったので、適当Easy 「一番遠くに行くとき」 ⇔ 「一番左か右に行くとき(大きい方)」 なので、右に沢山いくパターンと左に沢山パターンに分けて考えれば良い。したがって、?を全てLと解釈したときの答えと、?を全てRと解釈したときの答えの…

SRM499 Div2

久々にpracticeしました。Easy 229.95/250 正の整数が沢山あって、X+YとX-Yが含まれている。X*Yの最大値を求めよ。全探索で良い。AとB(A>B)の偶奇が一致するとき、整数X,Yは存在して、X=(A+B)/2,Y=(A-B)/2となる。 加法定理を逆向きに使うときにこんな感じの…

SRM537 Div2

Easy 子音が6個で母音が2個で、母音が両方とも同じであれば"YES"でそうじゃなければ"NO"を出力する。 数えるだけ class KingXNewBaby{ public: string isValid(string s) { int len = s.size(); if(len!=8) return "NO"; int a = 0; for(int i = 0; i < len;…

SRM536 Div2

いつもより、読解が大変だった。あと、easyで中括弧忘れに気づくのに時間が掛かり過ぎたりしてたから、気を付けなければならないEasy 与えられた方程式にx=0,1を代入して、f(x)が偶数になるxの個数を求めます。 x=0の場合は、a[0]のみを考えればよく、x=1の…

SRM535 Div2

Easy 連立方程式を解く問題。 解が存在すると仮定して、それが整数になるかを判定するだけの人がまあまあいました。どう解いても、検算すればだいたい大丈夫だから、検算しましょう。 私は検算してませんが、challengeしてくる方は流石に居ませんでした。 cl…

SRM533 Div2

Easy (入力の)最後の1文字まで考えないと、「pikapipip」みたいなので落ちます。 class PikachuEasy{ public: string check(string s) { for(int i = 0,l = s.size(); i < l; i+=2){ int f = 0; if(s[i] == 'p'){ if(i+1

SRM528 Div2

初参加撃墜したかった。Easy やるだけ。n/2のところで結構考えて時間使ったけど、普通にi class MinCostPalindrome{ public: int getMinimum(string s, int oCost, int xCost) { int n = s.size(); int m = min(oCost,xCost); int ans = 0; for(int i = 0; i …

SRM258 Div2 Easy

Easy 77.64/250英語とSTLが出来ないから、スコアが低くなった。 upper_bound()からlower_bound()を引くと、個数が出てくるって蟻本に書いてあったから、それ使った。 int memo[101]; class ClassScores{ public: vector <int> findMode(vector <int> scores) { sort(sc</int></int>…

SRM466 Div2 Easy

わざわざ書く必要が感じられないけど、一応Easy 232.86/250総当たりするしかないよね。for文って繋げないほうが見やすいのかな。 class LotteryTicket{ public: string buy(int price, int b1, int b2, int b3, int b4) { for(int i=0; i<=1; i++) for(int j…