Particle

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

SRM 596

250 要素がすべて0であるような配列に対して、「配列の要素一つに対して1増やす操作」(操作1)と、「配列のすべての要素を2倍する」(操作2)という操作を繰り返して、与えられた配列にする。 必要な操作の回数の最小値を求めよ。 例えば、二進法で{10100}は、…

バグのまとめ

"自分が"起こしやすいバグを書きます。頻度の高いと思うものが上に来るようにしています。 少しずつ増えていくかもしれません。 不等号のミス minとmaxの間違い 浮動小数点関係(これはバグとは言わないかもしれない) 浮動小数点で、出力の桁数が足りない 実…

SRM 586

250 点(i,Y[i-1])と点(i+1,Y[i]) を i = 1..n としてつないだ曲線がある。 この曲線と、直線 y = a との交点の個数の最大値を求めよ。という問題です。y[i]が大きく、aを沢山調べるのは難しいので、Y[i]とその近くだけを調べれば良いです。 (整数点(Y[i])だ…

SRM 585

250 高さがhの二分木が与えられる。枝分かれのない辺の集合に分割するとき、その集合の個数の最小値(を定数で割ったもの)を求める。分かりやすく言うと、一筆書きを何回か行って、高さhの二分木をつくるのに必要な回数の最小値を求める。証明はできませんが…

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++; }…

センター

自己採点 地理:70 国語:38+31+34+34=137 英語:188 リス:38 物理:100 化学:100 数IA:92 数IIB:98前期785(791)/900

目標(2013)

昨年のがアレだった(目標を達成する気があまり無かったのと、曖昧なものが混ざってた)ので、もう少しまともなのにします。 来年のことは分からないので、少なめにします。 合格体験記を書く tcで黄色以上になる PKU で300問解く

Codeforces Round #138 (Div. 2)

A 最初O(n^3)で書いてhackされてしまった。(O(n^3)のままですが、適当にbreakとかcontinueしてるので問題ないです) ソース int main(){ int a[3]; cin>>a[0]>>a[1]>>a[2]; sort(a,a+3); for(int i = 1; i <= 10000; i++){ if(a[0]%i||a[1]%i)continue; for(i…

ARC #007

A ソース int main(){ char c; string s; cin>>c>>s; for(int i = 0; i < s.size(); i++){ if(s[i]!=c)cout<<s[i]; } cout<<endl; return 0; } B ソース int main(){ int n,m; cin>>n>>m; vector<int> d(n+1); for(int i = 0; i <= n; i++)d[i]=i; for(int i = 0; i < m; i++){ int a; cin>>a; for(int i = 0; i < n+1; i++){ if(…</int></s[i];>

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…

Problem 89

できるだけ綺麗に書こうとしましたが、微妙です。 解法 実装する ソース #include <iostream> using namespace std; int rd(char c){ if(c=='I')return 1; if(c=='X')return 10; if(c=='C')return 100; if(c=='M')return 1000; if(c=='V')return 5; if(c=='L')return 5</iostream>…

移転しました

importしたので、ダイアリーの方は消しました。(リダイレクト)

Codeforces Round #135 (Div. 2)

A. それぞれの文字がkで割り切れれば良いです。 int d[26]; int main(){ int n; string s; cin>>n>>s; int l = s.size(); if(!(l%n)){//要らない for(int i = 0; i < l; i++){ d[s[i]-'a']++; } bool f = true; for(int i = 0; i < 26; i++){ if(d[i]%n)f=fa…

Problem 34

DailyCodingに投稿した方は、()が1つ余計でした。 gを1行にしようとしましたが、上手く行きませんでした。 g=:3 :0 if. y=+/!(10(a})a=.i.1+<.10^.y)#:y do. y else. 0 end. ) f=:3 :0 s=.0 for_j. i.y do. s =.s+g j+1 end. ) _3 + f 7*!9

SRM552 Div1

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

K^2PC Hard

4100/7500 で18thでした。 悪くはないと思いますが、Dの満点解法の実装が間に合わなくて悔しいです。HardのD,Eは良い問題だと思うので、Hardで丁度良かったです。A. 1個,2個,3個,... に分かれているから、 第n群の末項は、全体で第n*(n+1)/2項で、(1,n)にな…

Codeforces Round #133 (Div. 2)

A. 六角形の個数を求めます。 2 であるから、a=b=c=2のときを考えて、a,b,cが増えるときどの程度増えるかを考えれば解けます。 int main(){ int a,b,c,ans=7; cin>>a>>b>>c; a-=2;b-=2;c-=2; ans+=a*3; ans+=b*(a+3); ans+=c*(a+b+3); cout<

SRM551 Div1

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

Codeforces Round #131 (Div. 2)

久々にCFに出てみました。A. 全探索。 余計なことを考えずに、a,bが0から1000までの場合をすべて確かめる。 int main(){ int n,m,ans=0; cin>>n>>m; for(int i = 0; i <= 1000; i++){ for(int j = 0; j <= 1000; j++){ if(i*i+j==n&&i+j*j==m)ans++; } } cout…

ARC #006

A. バグらないように全探索しましたが、バグりました。 bool型の配列を使って、当選番号にO(1)でアクセスできるようにしたほうが良かったと思います。 int main(){ int a[6],b[6],c,ans=0,l=0; for(int i = 0; i < 6; i++)cin>>a[i]; cin>>c; for(int i = 0;…

KUPC2012

(感想)難易度が丁度良かったから、5時間ずっと楽しめました。A. x*(t/x)でxの倍数でt以下の最大の整数を求めると、TLEしません。 int main(){ int n,t,e; cin>>n>>t>>e; for(int i = 1; i <= n; i++){ int x; cin>>x; int y = x*(t/x); if(t-e<=y||y+x<=t+e)…

ARC #005

A. 最後と最後以外で場合分けします。(最初の12文字一致で実装するのでも良さそうです。追記:ダメです) int main(){ int n,ans = 0; string s; cin>>n; for(int i = 0; i < n-1; i++){ cin>>s; if(s=="TAKAHASHIKUN"||s=="Takahashikun"||s=="takahashikun")…

ARC #004

A. 全点間で距離を求めて、それらの最大値を出力する。 ans を 0 で初期化するのを忘れていて2WAしました。 int n,x[100],y[100]; int main(){ double ans=0; cin>>n; for(int i = 0; i < n; i++)cin>>x[i]>>y[i]; for(int i = 0; i < n; i++){ for(int j = …

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%…

ARC #002

A. 念入りにテストしてたら、2分以上かかってしまいました。 int main(){ int n; cin>>n; if(!(n%400)){ cout<<"YES"<

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 = …