2012-03-01から1ヶ月間の記事一覧

TCO2012 Round1A Easy(250) EllysJuice

EllysJuiceプレイヤーの人数が高々8人なので、全ての並びを試せば良い。実装がけっこう面倒くさい。 #include <string> #include <vector> #include <set> #include <map> #include <algorithm> using namespace std; class EllysJuice{public: vector <string> getWinners( vector <string> players ) { int n = (</string></string></algorithm></map></set></vector></string>…

TCO2012 Round1A

Easy (250) 219.39 Medium (500) 440.26 Hard (1000) 0 Challenge 0 結果 135位 1993→2022Mediumまでは調子が良かったけど、Hardが全然分からなかった。1個のライトに接続しているスイッチは高々2個という条件を見落としていた。こんなん解ける訳が無いだろ…

SRM538 Div2 Hard(1050) SkewedPerspectives

SkewedPerspectives連続した見えている黒いキューブの個数が全て偶数ならば、見えているとおりに積み上げれば良い。問題は、それが奇数個の場合。↓の左のように1個だけ隠す。奇数個の黒いキューブが地面に接している場合、黒いキューブが1個ならば無理だが、…

SRM538 Div2 Easy(300) LeftOrRight

LeftOrRight?を全てLに置換したプログラムか、全てRに置換したプログラムが答え。 #include <string> using namespace std; int reach( string s ) { int p = 0; int r = 0; for ( int i=0; i<(int)s.length(); i++ ) { p += s[i]=='L' ? -1 : 1; r = max( r, abs(p)</string>…

SRM538 Div1 Medium(450) TurtleSpy

TurtleSpyジグザグに進むと距離は短くなる。前進して、なるべく180°に近くなるように回転して、後退する。角度は整数で360通りしかないので、動的計画法により、回転可能な角度を求めることができる。 #include <sstream> #include <string> #include <vector> #include <cmath> using namesp</cmath></vector></string></sstream>…

SRM538 Div1 Easy(250), Div2 Medium(500) EvenRoute

EvenRoutex+yが偶数の点を偶、奇数の点を奇とする。偶の点が1個でもあるならば、スタート地点と各点を往復して、最後に偶の点に行けば、パリティを0にできる。また、偶の点が無いならば、最初の移動でパリティが1になり、その後どのように移動してもパリティ…

SRM538

Easy (250) 213.53 Medium (450) 294.76 Hard (1050) 0 Challenge 0 結果 132位 1961→1993

SRM537 Div2 Hard(925) PrinceXToastbook

PrinceXToastbookノード i から、prerequisite[i] に枝を張ると森になる。その森を辿って、あるトーストを p 番目に食べたときに、そのトーストと子孫のうち何枚を学習できるかを求める。 #include <vector> #include <numeric> using namespace std; vector<int> P; // 配列Sを返</int></numeric></vector>…

SRM537 Div2 Easy(250) KingXNewBaby

KingXNewBaby #include <string> using namespace std; class KingXNewBaby{public: string isValid( string name ) { int n = (int)name.length(); if ( n==8 ) { string v; for ( int i=0; i</string>

SRM537 Div1 Medium(500) KingXMagicSpells

KingXMagicSpellsビットごとに分けて計算することができる。途中の計算はXORと移動だけ。平均も、例えばビットが1になる確率がそれぞれのビットで50%とすると、000=010 50%、111=710 50%でも、010=210 50%、101=510 50%でも平均は等しい。 #include <vector> using n</vector>…

SRM537 Div1 Easy(275), Div2 Medium(550) KingXNewCurrency

KingXNewCurrencyXとYが題意を満たすことと、AもBもXp+Yqの形で表せることは、同値である。なぜなら、XとYが題意を満たせば当然AとBはXとYで表せるし、AとBがXとYで表せるならばAp+BqのAとBをそのXとYで置き換えれば良いから。XのみでAもBも表せるならば、Y…

SRM537

Easy (275) 205.99 Medium (500) 0 Hard (925) 0 Challenge 0 結果 364位 1995→1961レートが下がる一方だ……(´・ω・`)

SRM528 Div1 Easy(250), Div2 Medium(500) Cut

Cutウナギの長さが10kならば、k-1回切ってk本の長さ10のウナギが得られる。それ以外の場合は切った回数のウナギが得られる。長さが10の倍数で短いウナギから順に切っていけば良い。 #include <vector> #include <algorithm> using namespace std; bool cmp( int a, int b ) { re</algorithm></vector>…

SRM535 Div2 Easy(250) FoxAndIntegers

FoxAndIntegers #include <vector> using namespace std; class FoxAndIntegers{public: vector <int> get( int AminusB, int BminusC, int AplusB, int BplusC ) { vector<int> ans; for ( int A=-100; A<=100; A++ ) for ( int B=-100; B<=100; B++ ) for ( int C=-100; C<=1</int></int></vector>…

SRM535 Div1 Easy(250) Div2 Medium(500) FoxAndGCDLCM

FoxAndGCDLCMA=aG, B=bG とすると、aとbは互いに素で、L=abG, A+B=(a+b)Gである。互いに素で積がL/Gとなる2個の整数の和で、最小のものを返せば良い。 #include <algorithm> using namespace std; long long gcd(long long a,long long b) {long long t;if(a>b)t=a,a=b,</algorithm>…

SRM535

Easy (250) 206.61 Medium (500) 0 Hard (1000) 0 Challenge 0 結果 263位 2010→1995250は互いに素という条件を見落としていて提出が遅くなったし、最後のexampleが無ければ落ちていた。500は解いたつもりが、そもそも解法が違ったらしい。正しく解けること…