■Aizu Online Judge
Solved:254/46thRating:203.75/50th
Ratingは目標通り200に到達しましたが,そのせいでSolvedの順位が下がってしまいました.5月は,Solvedの順位を30位以上,願わくば20位以上にしたいです.
■TopCoder/Codeforces
Codeforcesは,一旦Div.2に落ちたものの,再びDiv.1に復帰しました.TopCoderは,Rating微増.
■Aizu Online Judge
Solved:254/46th■TopCoder/Codeforces
Codeforcesは,一旦Div.2に落ちたものの,再びDiv.1に復帰しました.■1202 Mobile Phone Coverage
面倒な問題.下の画像のような感じに分割した.区間をマージする処理が面倒だった.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int n; R[] rs; int caze; void run(){ for(caze=1;; caze++){ n=sc.nextInt(); if(n==0){ break; } rs=new R[n]; for(int i=0; i<n; i++){ double x=sc.nextDouble(); double y=sc.nextDouble(); double r=sc.nextDouble(); rs[i]=new R(x-r, y-r, x+r, y+r); } solve(); } } void solve(){ TreeSet<Double> setX=new TreeSet<Double>(); for(int i=0; i<n; i++){ setX.add(rs[i].x1); setX.add(rs[i].x2); } Double[] xs=setX.toArray(new Double[0]); sort(xs); int m=xs.length; @SuppressWarnings("unchecked") TreeSet<R>[] setR=new TreeSet[m]; for(int i=0; i<m; i++){ setR[i]=new TreeSet<R>(); } for(int j=0; j<m-1; j++){ for(int i=0; i<n; i++){ if(rs[i].x1<xs[j]+EPS&&xs[j]+EPS<rs[i].x2){ setR[j].add(rs[i]); } } } double sum=0; for(int k=0; k<m-1; k++){ LinkedList<Double> seg=new LinkedList<Double>(); for(R r : setR[k]){ if(abs(r.y1-r.y2)<EPS){ continue; } int i=seg.size(), j=seg.size(); for(int p=seg.size()-1; p>=0; p--){ double y=seg.get(p); if(y+EPS>r.y2){ j=p; } if(y+EPS>r.y1){ i=p; } } for(int p=i; p<j; p++){ seg.remove(i); } if(j%2==0){ seg.add(i, r.y2); } if(i%2==0){ seg.add(i, r.y1); } } double len=0; for(int i=0; i<seg.size(); i+=2){ len+=seg.get(i+1)-seg.get(i); } sum+=len*(xs[k+1]-xs[k]); } println(String.format("%d %.2f", caze, sum+EPS)); } class R implements Comparable<R>{ double x1, y1, x2, y2; R(double x1, double y1, double x2, double y2){ this.x1=x1; this.y1=y1; this.x2=x2; this.y2=y2; } @Override public int compareTo(R arg0){ if(y1-y2+EPS<0){ return -1; }else if(y1-y2>0+EPS){ return 1; }else if(x1-x2+EPS<0){ return -1; }else if(x1-x2>0+EPS){ return 1; }else{ return 0; } } } void debug(Object... os){ // System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1221 Numoeba
制限時間・メモリ共に余裕があるので,あとは気合で書くだけ.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int k; int m; int mod=12345678; boolean[] visited=new boolean[10000]; void run(){ for(;;){ k=sc.nextInt(); if(k==0){ break; } solve(); } } void solve(){ Cell leader=new Cell(k); m=0; int maxNum=1; for(int k=1;; k++){ LinkedList<Cell> que=new LinkedList<Cell>(); que.offer(leader); fill(visited, false); visited[leader.v]=true; for(; !que.isEmpty();){ Cell c=que.poll(); int n=c.n*3+1; for(; n%2==0;){ n/=2; } n%=mod; c.candidate=n>c.n&&(c.size()==0||(c.size()==1&&c!=leader)); c.n=n; if(c.n==1){ if(c==leader){ println(k+" "+maxNum); return; } Cell par=null; for(Cell d : c){ if(visited[d.v]){ par=d; } d.remove(c); } c.remove(par); if(c.size()==1){ Cell child=c.getFirst(); par.add(child); child.add(par); que.offer(child); visited[child.v]=true; } }else{ for(Cell d : c){ if(!visited[d.v]){ que.offer(d); visited[d.v]=true; } } } } fill(visited, false); Cell newLeader=new Cell(0); boolean overlap=false; int num=0; que.offer(leader); visited[leader.v]=true; for(; !que.isEmpty();){ Cell c=que.poll(); num++; for(Cell d : c){ if(!visited[d.v]){ que.offer(d); visited[d.v]=true; } } if(c.n>newLeader.n){ newLeader=c; overlap=false; }else if(c.n==newLeader.n){ overlap=true; } if(c.candidate&&((c.size()==1&&c!=leader)||c.size()==0)){ Cell d=new Cell(((c.n+1)/2)|1); if(d.n!=1){ c.add(d); d.add(c); num++; } } } if(!overlap){ leader=newLeader; Cell c=new Cell(((leader.n+1)/2-1)|1); if(c.n!=1){ leader.add(c); c.add(leader); num++; } } maxNum=max(maxNum, num); } } void dfs(Cell leader){ fill(visited, false); dfs(leader, ""); } void dfs(Cell c, String tab){ debug(tab, c.n, c.size(), c.v); visited[c.v]=true; for(Cell d : c){ if(!visited[d.v]){ dfs(d, tab+" "); } } } class Cell extends LinkedList<Cell>{ int n, v; boolean candidate; Cell(int n){ this.n=n; this.v=m++; } @Override public int hashCode(){ return v; } @Override public boolean equals(Object o){ return hashCode()==((Cell)o).hashCode(); } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1215 Co-occurrence Search
しゃくとり法で解くことが出来る.入力がややこしく,無限ループによるTLEを連発してしまった.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; char[] s, key; void run(){ for(;;){ StringBuffer lines=new StringBuffer(); for(;;){ String line=sc.nextLine(); if(line.equals("")){ break; } lines.append(line); } s=lines.toString().toCharArray(); key=sc.nextLine().toCharArray(); solve(); if(sc.hasNext()){ sc.nextLine(); }else{ break; } } System.out.flush(); } void solve(){ int i=0, j=0; int num=0; int n=s.length; int min=INF; int cMin=0, iMin=0, jMin=0; int nKey=0; boolean[] isKey=new boolean[256]; for(char c : key){ isKey[c]=true; } for(boolean b : isKey){ nKey+=b?1:0; } int[] count=new int[256]; for(;;){ for(; j<n&&num<nKey; j++){ if(isKey[s[j]]&&count[s[j]]++==0){ num++; } } if(num<nKey){ break; } if(j-i<min){ iMin=i; jMin=j; min=j-i; cMin=1; }else if(j-i==min){ cMin++; } if(isKey[s[i]]&&--count[s[i]]==0){ num--; } i++; } println(cMin+"\n"); if(cMin>0){ String ans=new String(s, iMin, jMin-iMin); for(int k=0; k<(ans.length()-1)/72+1; k++){ println(ans.substring(k*72, min((k+1)*72, ans.length()))); } println(""); } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1226 Fishnet
全通り試す.面積はヘロンの公式を使えば簡単.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int n; P[] a, b, c, d; void run(){ for(;;){ n=sc.nextInt(); if(n==0){ break; } n+=2; a=new P[n]; b=new P[n]; c=new P[n]; d=new P[n]; a[0]=new P(0, 0); b[0]=new P(0, 1); c[0]=new P(0, 0); d[0]=new P(1, 0); for(int i=1; i<n-1; i++) a[i]=new P(sc.nextDouble(), 0); for(int i=1; i<n-1; i++) b[i]=new P(sc.nextDouble(), 1); for(int i=1; i<n-1; i++) c[i]=new P(0, sc.nextDouble()); for(int i=1; i<n-1; i++) d[i]=new P(1, sc.nextDouble()); a[n-1]=new P(1, 0); b[n-1]=new P(1, 1); c[n-1]=new P(0, 1); d[n-1]=new P(1, 1); solve(); } } void solve(){ double ans=0; for(int j=0; j<n-1; j++){ for(int i=0; i<n-1; i++){ P p1=isLL(a[i], b[i], c[j], d[j]); P p2=isLL(a[i+1], b[i+1], c[j], d[j]); P p3=isLL(a[i+1], b[i+1], c[j+1], d[j+1]); P p4=isLL(a[i], b[i], c[j+1], d[j+1]); ans=max(ans, area(p1, p2, p3)+area(p3, p4, p1)); } } println(String.format("%.6f", ans+EPS)); } double area(P p1, P p2, P p3){ double a=p1.sub(p2).abs(); double b=p2.sub(p3).abs(); double c=p3.sub(p1).abs(); double s=(a+b+c)/2; return Math.sqrt(s*(s-a)*(s-b)*(s-c)); } // 直線と直線の交点 P isLL(P p1, P p2, P q1, P q2){ double d=q2.sub(q1).det(p2.sub(p1)); if(abs(d)<EPS) return null; return p1.add(p2.sub(p1).mul(q2.sub(q1).det(q1.sub(p1))/d)); } class P{ double x, y; P(){ this(0, 0); } P(double x, double y){ this.x=x; this.y=y; } P add(P p){ return new P(x+p.x, y+p.y); } P sub(P p){ return new P(x-p.x, y-p.y); } P mul(double m){ return new P(x*m, y*m); } P div(double d){ return new P(x/d, y/d); } double abs(){ return Math.sqrt(abs2()); } double abs2(){ return x*x+y*y; } double arg(){ return Math.atan2(y, x); } // inner product double dot(P p){ return x*p.x+y*p.y; } // outer product double det(P p){ return x*p.y-y*p.x; } P rot90(){ return new P(-y, x); } // conjugation P conj(){ return new P(x, -y); } @Override public String toString(){ return "("+x+", "+y+")"; } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■ 1217 Family Tree
入力の解析が少し面倒.クエリに対する判定は,ある人の親さえ分かれば非常に簡単に出来る.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int n, m; HashMap<String, String> parent; HashMap<String, LinkedList<String>> children; void run(){ for(;;){ n=sc.nextInt(); m=sc.nextInt(); if((n|m)==0){ break; } parent=new HashMap<String, String>(); children=new HashMap<String, LinkedList<String>>(); sc.nextLine(); String p="", r=""; // 親, 1つ前 children.put(p, new LinkedList<String>()); int x=-1; for(int j=0; j<n; j++){ String s=sc.nextLine(); int y=s.length()-s.replaceAll(" ", "").length(); s=s.replaceAll(" ", ""); // debug(s, r, p); if(y>x){ p=r; }else if(y<x){ for(int i=y; i<x; i++){ p=parent.get(p); } } parent.put(s, p); children.get(p).add(s); children.put(s, new LinkedList<String>()); x=y; r=s; } // dfs("", ""); for(int i=0; i<m; i++){ String s=sc.next(); sc.next(); sc.next(); char c=sc.next().charAt(0); sc.next(); String t=sc.next(); t=t.substring(0, t.length()-1); boolean f=false; switch(c){ case 'c': f=parent.containsKey(s)&&parent.get(s).equals(t); break; case 'p': f=parent.containsKey(t)&&parent.get(t).equals(s); break; case 's': f=parent.containsKey(s)&&parent.containsKey(t) &&parent.get(s).equals(parent.get(t)); break; case 'd': for(s=parent.get(s); s!=null; s=parent.get(s)){ f|=s.equals(t); } break; case 'a': for(t=parent.get(t); t!=null; t=parent.get(t)){ f|=t.equals(s); } break; } println(f?"True":"False"); } println(""); } } void dfs(String s, String tab){ for(String t : children.get(s)){ debug(tab, t, parent.get(t)); dfs(t, tab+"\t"); } } void debug(Object... os){ // System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
Codeforces Beta Round #69 (Div. 2 Only)
Div. 1復帰が目標でした.A. Panoramixs Prediction
値が小さいので愚直に一つずつ試行.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class A{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int m, n; void run(){ m=sc.nextInt(); n=sc.nextInt(); boolean f=true; for(int i=m+1; i<n; i++){ f&=!isP(i); } f&=isP(n); println(f?"YES":"NO"); } boolean isP(int n){ for(int i=2; i*i<=n; i++){ if(n%i==0){ return false; } } return n!=1; } void println(String s){ System.out.println(s); } void print(String s){ System.out.print(s); } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } public static void main(String[] args){ new A().run(); } }
B. Depression
%12を忘れないように気をつけるだけ.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class B{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; void run(){ String[] ss=sc.next().split(":"); double h=Integer.parseInt(ss[0]); double m=Integer.parseInt(ss[1]); h=(h%12)/12.0*360; m=m/60.0*360; h=(h+m/12)%360; println(h+" "+m); } void println(String s){ System.out.println(s); } void print(String s){ System.out.print(s); } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } public static void main(String[] args){ new B().run(); } }
C. Heroes
全探索で解くことが出来るが,ちょっとしたミスをしたためSystem Test落ち.下は修正版.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class C{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int n, a, b, c; int[] p, q; HashMap<String, Integer> map; void run(){ int m=7; map=new HashMap<String, Integer>(); map.put("Anka", 0); map.put("Chapay", 1); map.put("Cleo", 2); map.put("Troll", 3); map.put("Dracul", 4); map.put("Snowy", 5); map.put("Hexadecimal", 6); n=sc.nextInt(); p=new int[n]; q=new int[n]; for(int i=0; i<n; i++){ p[i]=map.get(sc.next()); sc.next(); q[i]=map.get(sc.next()); } a=sc.nextInt(); b=sc.nextInt(); c=sc.nextInt(); long dmin=1L<<32; int lmax=0; for(int k=1; k<1<<m; k++){ for(int j=1; j<1<<m; j++){ int i=((1<<m)-1)&~(k^j); if((k^j)==(k|j)&&i>0){ int x=a/Integer.bitCount(i); int y=b/Integer.bitCount(j); int z=c/Integer.bitCount(k); int d=max(abs(x-y), max(abs(y-z), abs(z-x))); int l=0; for(int e=0; e<n; e++){ if(((k>>p[e])&1)!=0&&((k>>q[e])&1)!=0) l++; else if(((j>>p[e])&1)!=0&&((j>>q[e])&1)!=0) l++; else if(((i>>p[e])&1)!=0&&((i>>q[e])&1)!=0) l++; } if(d<dmin){ dmin=d; lmax=l; }else if(d==dmin){ lmax=max(lmax, l); } } } } println(dmin+" "+lmax); } void println(String s){ System.out.println(s); } void print(String s){ System.out.print(s); } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } public static void main(String[] args){ new C().run(); } }
D. Falling Anvils
x2+√px+q=0は,p≧4qならば実解が存在する.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class D{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int t; double a, b; void run(){ t=sc.nextInt(); for(int i=0; i<t; i++){ a=sc.nextInt(); b=sc.nextInt(); double area; if(4*b<a+EPS){ area=2*b*(a-b); }else{ area=a*(b+a/8); } if(abs(b)<EPS){ println("1"); }else if(abs(a)<EPS){ println("0.5"); }else{ println(area/(2*a*b)+""); } } } void println(String s){ System.out.println(s); } void print(String s){ System.out.print(s); } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } public static void main(String[] args){ new D().run(); } }ooxo- 2726p 46位
■1218 Push!!
人の座標と荷物の座標を状態とし,距離を荷物を押した回数としたダイクストラで解ける.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int m, n; int[][] a; int mx0, my0, cx0, cy0, gx, gy; void run(){ for(;;){ m=sc.nextInt(); n=sc.nextInt(); if((m|n)==0){ break; } a=new int[n][m]; for(int j=0; j<n; j++){ for(int i=0; i<m; i++){ a[j][i]=sc.nextInt(); if(a[j][i]==2){ cx0=i; cy0=j; a[j][i]=0; }else if(a[j][i]==3){ gx=i; gy=j; a[j][i]=0; }else if(a[j][i]==4){ mx0=i; my0=j; a[j][i]=0; } } } solve(); } } void solve(){ PriorityQueue<P> que=new PriorityQueue<P>(); boolean[][][][] visited=new boolean[m][n][m][n]; int[][][][] d=new int[m][n][m][n]; for(int k=0; k<m; k++){ for(int j=0; j<n; j++){ for(int i=0; i<m; i++){ fill(d[k][j][i], INF); } } } que.add(new P(mx0, my0, cx0, cy0)); visited[mx0][my0][cx0][cy0]=true; d[mx0][my0][cx0][cy0]=0; int[] dx={0, 0, -1, 1}; int[] dy={1, -1, 0, 0}; for(; !que.isEmpty();){ P p=que.poll(); if(d[p.mx][p.my][p.cx][p.cy]<p.d){ continue; } for(int i=0; i<4; i++){ P q=new P(p.mx+dx[i], p.my+dy[i], p.cx, p.cy); int push=0; // 人が画面外or移動不可 if(q.mx<0||q.mx>=m||q.my<0||q.my>=n||a[q.my][q.mx]==1){ continue; } // 人の移動先がブロック if(q.mx==q.cx&&q.my==q.cy){ q.cx+=dx[i]; q.cy+=dy[i]; push=1; } // ブロックが画面外or配置不可 if(q.cx<0||q.cx>=m||q.cy<0||q.cy>=n||a[q.cy][q.cx]==1){ continue; } // 訪問していない if(!visited[q.mx][q.my][q.cx][q.cy]){ q.d=d[q.mx][q.my][q.cx][q.cy]=d[p.mx][p.my][p.cx][p.cy] +push; visited[q.mx][q.my][q.cx][q.cy]=true; que.offer(q); } } } int min=INF; for(int j=0; j<n; j++){ for(int i=0; i<m; i++){ min=min(min, d[i][j][gx][gy]); } } println(""+(min==INF?-1:min)); } class P implements Comparable<P>{ int mx, my, cx, cy; int d; P(int mx, int my, int cx, int cy){ this.mx=mx; this.my=my; this.cx=cx; this.cy=cy; } @Override public int compareTo(P p){ return d-p.d; } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1209 Square Coins
dp[i]を支払う金額がiの時のコインの組み合わせの数とする.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; void run(){ int n=17; int[] a=new int[n]; for(int i=0; i<n; i++){ a[i]=(i+1)*(i+1); } int max=300; int[] dp=new int[max]; dp[0]=1; for(int j=0; j<n; j++){ for(int i=a[j]; i<max; i++){ dp[i]+=dp[i-a[j]]; } } for(;;){ int k=sc.nextInt(); if(k==0){ break; } println(""+dp[k]); } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1209 Square Coins
dp[i]を支払う金額がiの時のコインの組み合わせの数とする.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; void run(){ int n=17; int[] a=new int[n]; for(int i=0; i<n; i++){ a[i]=(i+1)*(i+1); } int max=300; int[] dp=new int[max]; dp[0]=1; for(int j=0; j<n; j++){ for(int i=a[j]; i<max; i++){ dp[i]+=dp[i-a[j]]; } } for(;;){ int k=sc.nextInt(); if(k==0){ break; } println(""+dp[k]); } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■KingdomXCitiesandVillages
問題・解説は,Match Editorial Archiveを参考に.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; public class KingdomXCitiesandVillages { int INF=1<<28; double EPS=1e-9; int m, n; public double determineLength(int[] cx, int[] cy, int[] vx, int[] vy) { m=cx.length; n=vx.length; double sum=0; for(int j=0;j<n;j++){ LinkedList<R> list=new LinkedList<R>(); for(int i=0;i<n;i++){ if(i!=j){ list.add(new R(Math.hypot(vx[j]-vx[i], vy[j]-vy[i]), false)); } } for(int i=0;i<m;i++){ list.add(new R(Math.hypot(vx[j]-cx[i], vy[j]-cy[i]), true)); } R[] rs=list.toArray(new R[0]); Arrays.sort(rs); for(int i=0;i<rs.length;i++){ if(rs[i].isCity){ sum+=rs[i].d/(i+1); break; }else{ sum+=rs[i].d/(i+1)/(i+2); } } } return sum; } class R implements Comparable<R>{ double d; boolean isCity; R(double d, boolean isCity){ this.d=d; this.isCity=isCity; } public int compareTo(R r){ if(d-r.d+EPS<0){ return -1; }else if(d-r.d>0+EPS){ return 1; }else{ return 0; } } } } // Powered by FileEdit // Powered by TZTester 1.01 [25-Feb-2003] // Powered by CodeProcessor
■1216 Lost in Space
全探索で間に合う.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; double[] d; P[] ps; int n; void run(){ d=new double[3]; for(int t=sc.nextInt(); t>0; t--){ for(int i=0; i<3; i++){ d[i]=sc.nextDouble(); } n=sc.nextInt(); ps=new P[n]; for(int i=0; i<n; i++){ double x=sc.nextDouble(); double y=sc.nextDouble(); double z=sc.nextDouble(); ps[i]=new P(x, y, z); } solve(); } } void solve(){ double[] len={0, 0, 0}; for(int c=0; c<n; c++){ for(int b=0; b<n; b++){ if(b==c){ continue; } for(int a=0; a<n; a++){ if(a==b||a==c){ continue; } len[0]=ps[b].sub(ps[c]).abs()/d[0]; len[1]=ps[c].sub(ps[a]).abs()/d[1]; len[2]=ps[a].sub(ps[b]).abs()/d[2]; boolean error=false; for(int i=0; i<3; i++){ int p=i; int q=(i+1)%3; error|=abs(len[p]-len[q])/len[p]+EPS>=0.001; } if(!error){ println((a+1)+" "+(b+1)+" "+(c+1)); } } } } } class P{ double x, y, z; P(){ this(0, 0, 0); } P(double x, double y, double z){ this.x=x; this.y=y; this.z=z; } P add(P p){ return new P(x+p.x, y+p.y, z+p.y); } P sub(P p){ return new P(x-p.x, y-p.y, z-p.z); } P mul(double m){ return new P(x*m, y*m, z*m); } P div(double d){ return new P(x/d, y/d, z/d); } double abs(){ return Math.sqrt(abs2()); } double abs2(){ return x*x+y*y+z*z; } // inner product double dot(P p){ return x*p.x+y*p.y+z*p.y; } // outer product P det(P p){ return new P(y*p.z-z*p.y, z*p.x-x*p.z, x*p.y-y*p.x); } @Override public String toString(){ return x+", "+y+", "+z; } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1214 Walking Ant
BFSで解ける.但し状態を,(x, y, hp)とする.hpは現在の体力を表す.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int m, n; int sx, sy, gx, gy; int[][] a; void run(){ for(;;){ m=sc.nextInt(); n=sc.nextInt(); if((m|n)==0){ break; } a=new int[n][m]; for(int j=0; j<n; j++){ for(int i=0; i<m; i++){ a[j][i]=sc.nextInt(); if(a[j][i]==2){ sx=i; sy=j; a[j][i]=1; }else if(a[j][i]==3){ gx=i; gy=j; a[j][i]=1; } } } solve(); } } void solve(){ int max=7; int[][][] d=new int[n][m][max]; boolean[][][] visited=new boolean[n][m][max]; LinkedList<P> que=new LinkedList<P>(); for(int j=0; j<n; j++){ for(int i=0; i<m; i++){ fill(d[j][i], INF); } } que.offer(new P(sx, sy, 6)); d[sy][sx][6]=0; visited[sy][sx][6]=true; int[] dx={0, 0, -1, 1}; int[] dy={-1, 1, 0, 0}; for(; !que.isEmpty();){ P p=que.poll(); for(int i=0; i<4; i++){ P q=new P(p.x+dx[i], p.y+dy[i], p.hp-1); if(q.x>=0&&q.x<m&&q.y>=0&&q.y<n&&a[q.y][q.x]!=0&&q.hp>0){ if(a[q.y][q.x]==4){ q.hp=6; } if(!visited[q.y][q.x][q.hp]){ que.offer(q); d[q.y][q.x][q.hp]=d[p.y][p.x][p.hp]+1; visited[q.y][q.x][q.hp]=true; } } } } int ans=INF; for(int k=0; k<max; k++){ ans=min(ans, d[gy][gx][k]); } println((ans!=INF?ans:-1)+""); } class P{ int x, y, hp; P(int x, int y, int hp){ this.x=x; this.y=y; this.hp=hp; } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
SRM 503(12/19 1:00~3:00)
■FoxMakingDice(Div1 Easy)
Toastmanは,パンを何枚か焼きたい.パンには幾つかの種類があり,ある種類のパンは,X分未満焼くとunder toasted,X分超過焼くとover toastedとなる.・パンの種類が1つで良い場合.
UUUUU | OOOOOO・パンが何種類あっても不可能な場合.
O…………・パンの種類が2つで良い場合.
上記のどれにも当てはまらない場合.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; public class ToastXToast { int INF=1<<28; double EPS=1e-9; public int bake(int[] a, int[] b) { Arrays.sort(a); // o Arrays.sort(b); // x boolean f=true; for(int j=0;j<b.length;j++){ for(int i=0;i<a.length;i++){ f&=a[i]<b[j]; } } if(f){ return 1; } else if(a[0]>b[0]||a[a.length-1]>b[b.length-1]){ return -1; } else if(a.length>=2&&b.length>=2){ return 2; } else{ return -1; } } void debug(Object...os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args) { ToastXToast temp = new ToastXToast(); } }
■Result
○×× 0 0■Rating
1243 -> 1279■1212 Mirror Illusion
ある座標pから方向vを見ていたとする.ちなみに,初期条件は,p0=(0.75, 0.25),v0=(1, 1)import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int n; int m; Seg[] segs; void run(){ m=8; for(;;){ n=sc.nextInt(); if(n<0){ break; } segs=new Seg[n]; for(int i=0; i<n; i++){ char c=sc.next().charAt(0); int x=sc.nextInt(); int y=sc.nextInt(); if(c=='x'){ segs[i]=new Seg(0, x, y, x+1, y); }else{ segs[i]=new Seg(1, x, y, x, y+1); } } solve(); } } void solve(){ P p0=new P(0.75, 0.25); P p=new P(0.75, 0.25); P v=new P(1, 1); Seg[] walls=new Seg[4]; walls[0]=new Seg(0, 0, 0, m, 0); walls[1]=new Seg(0, 0, m, m, m); walls[2]=new Seg(0, 0, 0, 0, m); walls[3]=new Seg(0, m, 0, m, m); for(int i=0; i<10; i++){ v=v.div(v.abs()).mul(2*m); if(p.sub(p0).abs()>EPS&&disSP(p, p.add(v), p0)<EPS){ int x=(int)(p0.x*100+EPS); int y=(int)(p0.y*100+EPS); println(x+" "+y); break; } Seg seg=null; P p2=null; double min=INF; for(Seg s : segs){ if(crsSS(p, p.add(v), s.p1, s.p2)){ P q=isLL(p, p.add(v), s.p1, s.p2); double d=p.sub(q).abs(); if(d<min+EPS&&d>EPS){ seg=s; p2=q; min=p.sub(q).abs(); } } } if(p2!=null){ p=p2; if(seg.d==0){ v.y=-v.y; }else{ v.x=-v.x; } }else{ for(Seg s : walls){ if(crsSS(p, p.add(v), s.p1, s.p2)){ P q=isLL(p, p.add(v), s.p1, s.p2); if(p.sub(q).abs()>EPS){ int x=(int)(q.x*100+EPS); int y=(int)(q.y*100+EPS); println(x+" "+y); } } } break; } } } // 線分と点の距離 double disSP(P p1, P p2, P q){ if(p2.sub(p1).dot(q.sub(p1))<EPS) return q.sub(p1).abs(); if(p1.sub(p2).dot(q.sub(p2))<EPS) return q.sub(p2).abs(); return disLP(p1, p2, q); } // 直線と点の距離 double disLP(P p1, P p2, P q){ return abs(p2.sub(p1).det(q.sub(p1)))/p2.sub(p1).abs(); } // 線分と線分の交差判定 boolean crsSS(P p1, P p2, P q1, P q2){ if(max(p1.x, p2.x)+EPS<min(q1.x, q2.x)) return false; if(max(q1.x, q2.x)+EPS<min(p1.x, p2.x)) return false; if(max(p1.y, p2.y)+EPS<min(q1.y, q2.y)) return false; if(max(q1.y, q2.y)+EPS<min(p1.y, p2.y)) return false; return signum(p2.sub(p1).det(q1.sub(p1))) *signum(p2.sub(p1).det(q2.sub(p1)))<EPS &&signum(q2.sub(q1).det(p1.sub(q1))) *signum(q2.sub(q1).det(p2.sub(q1)))<EPS; } // 直線と直線の交点 P isLL(P p1, P p2, P q1, P q2){ double d=q2.sub(q1).det(p2.sub(p1)); if(abs(d)<EPS) return null; return p1.add(p2.sub(p1).mul(q2.sub(q1).det(q1.sub(p1))/d)); } class Seg{ int d; P p1, p2; Seg(int d, int x1, int y1, int x2, int y2){ this.d=d; p1=new P(x1, y1); p2=new P(x2, y2); } } // 2 dimensions class P{ double x, y; P(){ this(0, 0); } P(double x, double y){ this.x=x; this.y=y; } P add(P p){ return new P(x+p.x, y+p.y); } P sub(P p){ return new P(x-p.x, y-p.y); } P mul(double m){ return new P(x*m, y*m); } P div(double d){ return new P(x/d, y/d); } double abs(){ return Math.sqrt(abs2()); } double abs2(){ return x*x+y*y; } double arg(){ return Math.atan2(y, x); } // inner product double dot(P p){ return x*p.x+y*p.y; } // outer product double det(P p){ return x*p.y-y*p.x; } P rot90(){ return new P(-y, x); } // conjugation P conj(){ return new P(x, -y); } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1211 Trapezoids
下のような入力が与えられたとする.
*** * * ********** * * * * * * * *** * * * * * * * * * * ***** * * * * * * * ********** * * ************ |
-----------***--------- -----------* *-------- **********-* *------- * *-* *------ * *** *-* *----- * * * *-* *---- * ***** *-* *--- * *-* *-- **********-* *- -----------************ |
-----------***--------- -----------* *-------- -----------* *------- - --* *------ - *** --* *----- - * * --* *---- - ***** --* *--- - --* *-- -----------* *- -----------************ |
-----------***--------- -----------* *-------- -----------* *------- -----------* *------ --***------* *----- --* *-----* *---- --*****----* *--- -----------* *-- -----------* *- -----------************ |
import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int n, m; int[][] a; int c; boolean[] wall; void run(){ for(int k=0;; k++){ n=sc.nextInt(); if(n==0){ break; } if(k>0){ println("----------"); } sc.nextLine(); m=0; String[] ss=new String[n]; for(int i=0; i<n; i++){ ss[i]=sc.nextLine(); m=max(m, ss[i].length()); } a=new int[n][m]; for(int j=0; j<n; j++){ for(int i=0; i<ss[j].length(); i++){ a[j][i]=ss[j].charAt(i)=='*'?1:0; } } solve(); } } void solve(){ c=2; wall=new boolean[]{false, true, true}; for(int j=0; j<n; j++){ if(a[j][0]==0){ bfs(0, j); } if(a[j][m-1]==0){ bfs(m-1, j); } } for(int i=0; i<m; i++){ if(a[0][i]==0){ bfs(i, 0); } if(a[n-1][i]==0){ bfs(i, n-1); } } HashMap<Integer, Integer> map=new HashMap<Integer, Integer>(); int[] dx={1, 1, 0, -1, -1, -1, 0, 1}; int[] dy={0, 1, 1, 1, 0, -1, -1, -1}; for(int j=0; j<n; j++){ for(int i=0; i<m; i++){ if(a[j][i]==1){ int outline=0; int d=0; int x=i, y=j; for(;;){ outline++; a[y][x]=0; boolean f=false; d=(d+5)%8; for(int k=0; k<8; k++, d=(d+1)%8){ int x2=x+dx[d]; int y2=y+dy[d]; if(x2>=0&&x2<m&&y2>=0&&y2<n&&a[y2][x2]==1){ x=x2; y=y2; f=true; break; } } if(!f){ break; } } c=-1; wall=new boolean[]{false, false, true}; int area=bfs(x, y); if(!map.containsKey(area)){ map.put(area, 0); } map.put(area, map.get(area)+1); c=2; wall=new boolean[]{false, true, true}; bfs(x, y); } } } Integer[] is=map.keySet().toArray(new Integer[0]); sort(is); for(int key : is){ println(key+" "+map.get(key)); } } int bfs(int x, int y){ int[] dx={0, 0, -1, 1}; int[] dy={-1, 1, 0, 0}; LinkedList<P> que=new LinkedList<P>(); boolean[][] visited=new boolean[n][m]; que.add(new P(x, y)); visited[y][x]=true; int res=0; for(; !que.isEmpty();){ P p=que.poll(); if(c>=0){ a[p.y][p.x]=c; } res++; for(int i=0; i<4; i++){ P q=new P(p.x+dx[i], p.y+dy[i]); if(q.x>=0&&q.x<m&&q.y>=0&&q.y<n&&!visited[q.y][q.x] &&!wall[a[q.y][q.x]]){ que.add(q); visited[q.y][q.x]=true; } } } return res; } class P{ int x, y; P(int x, int y){ this.x=x; this.y=y; } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1208 Rational Irrationals
全探索を行うと,O(n2)でかなりキツイ.そこで二部探索を使う.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int p, m; void run(){ for(;;){ p=sc.nextInt(); m=sc.nextInt(); if((p|m)==0){ break; } solve(); } } void solve(){ long n1=0, d1=1; long n2=m, d2=1; for(long d=1; d<=m; d++){ double left=1, right=m; for(int i=0; i<100; i++){ double mid=(left+right)/2; if(mid*mid<p*d*d+EPS){ left=mid; }else{ right=mid; } } int n=(int)(left+EPS); if(n1*d<n*d1&&n*n<p*d*d){ n1=n; d1=d; } if(++n<=m){ if(p*d*d<n*n&&n*d2<n2*d){ n2=n; d2=d; } } } long gcd=gcd(n1, d1); n1/=gcd; d1/=gcd; gcd=gcd(n2, d2); n2/=gcd; d2/=gcd; println(n2+"/"+d2+" "+n1+"/"+d1); } long gcd(long m, long n){ for(; n!=0;){ m=m%n; long t=m; m=n; n=t; } return m; } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1204 Pipeline Scheduling
再帰を用いて実際にシミュレートする.左端から詰めていくようにして,簡単な枝刈り(現時点でのサイクル数が,暫定の最短より長い場合は中断)を付け加えれば通る.import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int n, t, u; int[][] a, b; int ans; void run(){ t=10; u=5; for(;;){ n=sc.nextInt(); if(n==0){ break; } a=new int[u][n]; for(int j=0; j<u; j++){ String s=sc.next(); for(int i=0; i<n; i++){ a[j][i]=s.charAt(i)=='.'?0:1; } } solve(); } } void rec(int k, int p){ if(p>=ans){ return; } if(k==t+1){ ans=min(ans, p+n-1); return; } for(int q=p; q<p+n; q++){ boolean f=true; for(int j=0; j<u; j++){ for(int i=0; i<n; i++){ f&=a[j][i]==0||b[j][q+i]==0; } } if(f){ for(int j=0; j<u; j++){ for(int i=0; i<n; i++){ if(a[j][i]==1){ b[j][q+i]=k; } } } rec(k+1, q+1); for(int j=0; j<u; j++){ for(int i=0; i<n; i++){ if(a[j][i]==1){ b[j][q+i]=0; } } } } } } void solve(){ ans=INF; b=new int[u][(n+1)*(t+1)]; rec(1, 0); println(""+ans); } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1203 Napoleon's Grumble
回文の中心点jを0~n-1まで動かしながら,import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; String s; void run(){ for(; sc.hasNextLine();){ s=sc.nextLine(); solve(); } } void solve(){ s=s.toUpperCase().replaceAll("[^A-Z]", ""); int n=s.length(); TreeSet<String> set=new TreeSet<String>(); for(int j=0; j<n; j++){ int i; for(i=0; j-i>=0&&j+i<n&&s.charAt(j-i)==s.charAt(j+i); i++); i--; if(i>=1){ set.add(s.substring(j-i, j+i+1)); } for(i=0; j-i>=0&&j+i+1<n&&s.charAt(j-i)==s.charAt(j+i+1); i++); i--; if(i>=1){ set.add(s.substring(j-i, j+i+2)); } } for(Iterator<String> i=set.iterator(); i.hasNext();){ String s=i.next(); for(Iterator<String> j=set.iterator(); j.hasNext();){ String t=j.next(); if((s.length()+t.length())%2==0&&t.length()>s.length()){ int k=(t.length()-s.length())/2; if(t.substring(k, t.length()-k).equals(s)){ i.remove(); break; } } } } for(; !set.isEmpty();){ print(set.pollFirst()); if(!set.isEmpty()){ print(" "); } } println(""); } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
■1201 Lattice Practices
まず,10枚の板から5枚を選び,その5枚で構成出来るパターンを全て列挙.列挙の際,反転させても変わらない板がある場合があるので,重複を考慮する必要がある.それぞれのパターンに対応するパターンを残りの5枚で構成できうるかを判定する. 10個から5個選ぶ…10P5=30240 反転の種類…25=32import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int[] a, rev; int n, m; void run(){ n=10; m=n/2; a=new int[n]; rev=new int[1<<m]; for(int i=0; i<1<<m; i++){ int x=i; x=(x&0x55555555)<<1|(x>>1)&0x55555555; x=(x&0x33333333)<<2|(x>>2)&0x33333333; x=(x&0x0f0f0f0f)<<4|(x>>4)&0x0f0f0f0f; x=(x<<24)|((x&0xff00)<<8)|((x>>8)&0xff00)|(x>>24); rev[i]=(int)(x>>(32-m))&((1<<m)-1); } for(;;){ for(int i=0; i<n; i++){ String s=sc.next(); if(s.equals("END")){ return; } a[i]=Integer.parseInt(s, 2); } solve(); } } void solve(){ int ans=0; int[] b=new int[m]; int[] c=new int[m]; int comb=(1<<m)-1; boolean[] used=new boolean[m]; for(; comb<1<<n;){ // 2^(反転させても同じものの個数)で割る int div=1; for(int i=0, j=0, k=0; k<10; k++){ if((comb>>k&1)==1){ b[i++]=a[k]; if(rev[a[k]]==a[k]){ div*=2; } }else{ c[j++]=a[k]; } } Arrays.sort(b); int sum=0; for(;;){ // 2^n通り反転させる for(int sup=0; sup<1<<m; sup++){ for(int i=0; i<m; i++){ if((sup>>i&1)==1){ b[i]=rev[b[i]]; } } // bの並びをcで構築できるか Arrays.fill(used, false); sum++; for(int i=0; i<m; i++){ int bits=0; for(int j=0; j<m; j++){ bits=(bits<<1)|(b[j]>>i&1); } int k=-1; for(int j=0; j<m; j++){ if(!used[j] &&((c[j]^bits)==(1<<m)-1||(rev[c[j]]^bits)==(1<<m)-1)){ k=j; } } if(k>=0){ used[k]=true; }else{ sum--; break; } } for(int i=0; i<m; i++){ if((sup>>i&1)==1){ b[i]=rev[b[i]]; } } } if(!nextPermutation(b)){ break; } } ans+=sum/div; int x=comb&-comb, y=comb+x; comb=((comb&~y)/x>>1)|y; } ans/=8; // 鏡像反転*回転 println(""+ans); } boolean nextPermutation(int[] is){ int n=is.length; for(int i=n-1; i>0; i--){ if(is[i-1]<is[i]){ int j=n; while(is[i-1]>=is[--j]); swap(is, i-1, j); rev(is, i, n); return true; } } rev(is, 0, n); return false; } void swap(int[] is, int i, int j){ int t=is[i]; is[i]=is[j]; is[j]=t; } void rev(int[] is, int i, int j){ for(j--; i<j; i++, j--){ int t=is[i]; is[i]=is[j]; is[j]=t; } } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
SRM | Easy | Normal | Hard |
295 | o | - | - |
296 | o | - | - |
297 | o | - | - |
298 | o | - | - |
350 | o | - | - |
386 | o | - | - |
447 | o | - | - |
451 | o | - | - |
462 | o | - | - |
463 | o | - | - |
464 | o | - | - |
465 | o | - | - |
466 | o | - | - |
469 | o | - | - |
471 | o | - | - |
472 | o | - | - |
473 | o | - | - |
474 | o | - | - |
475 | o | - | - |
476 | o | - | - |
477 | o | - | - |
478 | o | - | - |
479 | o | - | - |
480 | o | - | - |
481 | o | - | - |
482 | o | o | - |
483 | o | - | - |
484 | o | - | - |
485 | o | - | - |
486 | o | - | - |
487 | o | - | - |
503 | - | o | - |
511 | - | o | - |
1 | hello world | 30B |
2 | echo | 31B |
3 | 99 shinichiroes of hamaji | 258B |
4 | example com | 451B |
5 | Smileys Triangle | 63B |
8 | delete blank lines | 37B |
14 | ultimate problem | 19B |
16 | even lines | 40B |
19 | Fibonacci Numbers | 46B |
34 | FizzBuzz | 84B |
48 | 67B |