Register
|
Login
Home
News
Competitions
Practice
How to
Rankings
Calendar
Arena
CodeFu 2010
CodeFu'10 Highlights
Jazoon'10 Highlights
Schedule
Rules
Prizes
Results
Competitions
»
Main CodeFu Competitons
»
CodeFu 2010
»
Results
CodeFu 2010 Results
Final Round Results
bojan's solution for 300: NumberSequence, written in Java, submitted on 09.05.2010 14:11:55
public class NumberSequence { private long getNum( int i) { String tmp = ""+i; //System.out.println("@ "+i+" = "+(tmp.length()-1)); return tmp.length()-1; } public int findDigit(int N) { long arr[] = new long [100002]; arr[1] = 1; int cur = 1; long plus = 0; for( int i=2; i<=N; ++i ) { /*arr[i] = arr[i-1]+i; if( i >= 10 ) { int tmp=i; ++plus; while( tmp >= 10 ) { tmp= tmp/10; arr[i]+=plus; } }*/ plus += getNum(i); arr[i] = arr[i-1]+i+plus; //System.out.println("# "+arr[i]); if( arr[i] >= N ) { cur=i; break; } } //System.out.println(N+ " "+cur+ " "+arr[cur]); String buff = ""; int num = cur; int minus=0; for( int i=0; i <= arr[cur]-N; ) { buff+=num; //System.out.println(buff+"|"+buff.length()); String tmp = ""+num; i+=tmp.length(); if( tmp.length() > 1 ) minus+=tmp.length()-1; num--; } //System.out.println((int)buff.charAt((int) (arr[cur]-N-1))-48); return (int)buff.charAt((int) (arr[cur]-N-minus))-48; } }