Particle

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

2012-01-01から1年間の記事一覧

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

ABBYY Cup 2.0 - Easy

4時間のコンテストでした。 A. n×nの行列の対角と中央の行と列にある数字をすべて足します。 普通に足して、中央の数字の3倍を引いても良いです。 int g[128][128]; int main(){ int n,ans = 0; cin>>n; for(int i = 0; i < n; i++){ for(int j = 0; j < n; …

GCJ Qualification Round 2012

60pts(3703th)で通過。A. やるだけ。中括弧を使ってしまったのは反省しなければならない。 char decoding[] = {'y','h','e','s','o','c','v','x','d','u','i','g','l','b','k','r','z','t','n','w','j','p','f','m','a','q'}; int main(){ int T; string s; …

AOJ 0109: Smart Calculator

実装するだけですが、こういうの(構文解析?)に慣れてないから、実装が結構難しかったです。 整数が1桁だと思い込んでいるとWAします。 #include <iostream> #include <string> using namespace std; string s; int single(int& pos); int figure(int& pos); int solve(int& pos</string></iostream>…

AOJ 0548: Reindeer with no sense of direction

AOJ

まず、逆向き(プレゼントを拾う方向)に考えると探索空間が減ることが、この問題の重要な性質です。これに気が付かないとAOJでは通せないと思います。AOJの場合、実行時間制限とメモリ制限が厳しく、ナイーブな探索やDPでは解けないので、少し工夫する必要が…

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

AOJ 0540: Amidakuji

AOJ

横棒を通るときに、番号をその棒に記録しておけば、もう片方から来たときにO(1)で交差してることが分かります。 交差を切ることで、得点を入れ替えることができるから、最も得点差(点数を減らせる量)の大きいものを求めれば良いです。 #include<cstdio> #include<cstring> #in</cstring></cstdio>…

AOJ 0541: Walk

AOJ

愚直に全てシミュレーションするとTLEするので、N-1回散歩した後の地図を求めます。 ある点をn回通るとき、 (i) nが偶数のとき、東と南にn/2回ずつ通る (ii)nが奇数のとき、最初に書かれていた文字の方向に(n+1)/2回、もう一方に(n-1)/2回通る よって、通過…

AOJ 0549: A Traveler

AOJ

特定の区間に足し算をするのを高速(全体でO(n+m)くらい)に行えば良いから、累積和で解くことができます。 #include<cstdio> #include<algorithm> using namespace std; #define MOD 100000 int inn[100000],walk[100001]; int main(){ int n,m; scanf("%d%d",&n,&m); for(int i </algorithm></cstdio>…

AOJ 0557: A First Grader

AOJ

動的計画法で解けます。引っかかる人はほとんどいないかもしれませんがコーナーケース(最初が0のとき)があります。 #include<iostream> using namespace std; typedef long long ll; ll dp[100][21]; int data[100]; int main(){ int n; cin>>n; for(int i = 0; i < n;</iostream>…