ラベル TopCoder の投稿を表示しています。 すべての投稿を表示
ラベル TopCoder の投稿を表示しています。 すべての投稿を表示

2011年6月9日木曜日

SRM 408 DIV2

191.64/250
[java]
public class TournamentJudging {

public int getPoints(int[] rawScores, int[] conversionFactor) {
System.out.println("!");
int score = 0;
for(int i=0; i int tmp = rawScores[i] % conversionFactor[i] < (conversionFactor[i]+1)/2 ?
rawScores[i]/conversionFactor[i] :
rawScores[i]/conversionFactor[i]+1;
System.out.println(tmp);
score += tmp;
}
return score;
}
}

[/java]

SRM 148 DIV1|177.09/250

トランプのゲームの問題
[java]
public class CircleGame {
public int cardsLeft(String deck) {
boolean end = false;
deck = deck.replaceAll("K", "");
System.out.println(deck);
for(int i=0; i if( parse(deck.charAt(i)) + parse(deck.charAt(i+1) ) == 13 ) {
deck = deck.substring(0, i) + deck.substring(i+2);
i++;
}
}

while (deck.length() > 1 && parse(deck.charAt(0))+parse(deck.charAt(deck.length()-1)) == 13 )
deck = deck.substring(1, deck.length()-1);

return deck.length();
}

public int parse(char ch) {
if ('A' == ch)
return 1;
else if ('T' == ch)
return 10;
else if('J' == ch)
return 11;
else if('Q' == ch)
return 12;

return ch - '0';

}
}
[/java]

2011年4月28日木曜日

SRM 146 DIV1 | 257.77/300

格子の中に存在する長方形の数を答える問題。
[java]
public class RectangularGrid {
public long countRectangles(int width, int height) {
long wid = (long)width;
long hei = (long)height;
long allRect = (wid+1)*wid/2 * (hei+1)*hei/2;
long square = 0L;
for(int i=0; iheight ? 0 : height-i;
square += wlength * hlength;
}
long result = allRect - square;
return result;
}
}
[/java]

2011年4月26日火曜日

SRM 145 DIV1 | 122.11/250

数字列を割合に変換し、あまりをポイント高い順に振り分ける
[java]
public class Bonuses {
public int[] getDivision(int[] points) {
int total = 0;
int max = 0;
for(int point : points) {
total += point;
max = Math.max(max, point);
}

int[] division = new int[points.length];
for(int i = 0; i division[i] = (points[i] * 100) / total;

int divtotal = 0;
for(int div : division)
divtotal += div;

int rest = 100 - divtotal;
loop:while(max > 0 && rest>0) {
for( int i=0; i0; i++) {
int plus = (points[i]==max) ? 1 : 0;
division[i] += plus;
rest -= plus;
}
max--;
}
return division;
}
}
[/java]

2011年4月24日日曜日

SRM 160 DIV1 | 90.00/300

指定の形式で暗号化されたバイナリ列をもとに戻す問題

[java]
public class BinaryCode {
public String[] decode(String message) {
int DEGIT = message.length();

int Q[] = new int[DEGIT];
for(int i=0; i Q[i] = Integer.valueOf(message.substring(i, i+1));

int P[] = new int[DEGIT];
String bin0="0", bin1="1";

P[0] = 0;
for(int i=0; i if( i== 0)
P[i+1] = Q[i]-P[i];
else
P[i+1] = Q[i]-P[i]-P[i-1];
if( P[i+1] < 0) {
bin0="NONE";
break;
}
bin0 += ""+P[i+1];
}
if (DEGIT > 1)
bin0 = (Q[DEGIT-1] == P[DEGIT-2]+P[DEGIT-1]) ? bin0 : "NONE";
else
bin0 = (Q[DEGIT-1] == P[DEGIT-1]) ? bin0 : "NONE";


P[0] = 1;
for(int i=0; i if( i== 0)
P[i+1] = Q[i]-P[i];
else
P[i+1] = Q[i]-P[i]-P[i-1];
if( P[i+1] < 0) {
bin1="NONE";
break;
}
bin1 += ""+P[i+1];
}
if (DEGIT > 1)
bin1 = (Q[DEGIT-1] == P[DEGIT-2]+P[DEGIT-1]) ? bin1 : "NONE";
else
bin1 = (Q[DEGIT-1] == P[DEGIT-1]) ? bin1 : "NONE";

return new String[] {bin0, bin1};
}
}
[/java]

2011年4月22日金曜日

SRM 160 DIV2 |249.79/500

長方形の共通部分の面積を求める問題
[java]
public class Intersect {
public void main(String args[]) {
}
public int area(int[] x, int[] y) {
if(x.length % 2 == 1 || y.length %2 == 1 || x.length != y.length)
return 0;

int Xmax=10000, Xmin=-10000;
int Ymax=10000, Ymin=-10000;

for(int i=0; i int xmax = Math.max(x[i], x[i+1]);
int xmin = Math.min(x[i], x[i+1]);

Xmax = Math.min(Xmax, xmax);
Xmin = Math.max(Xmin, xmin);
}
for(int i=0; i int ymax = Math.max(y[i], y[i+1]);
int ymin = Math.min(y[i], y[i+1]);

Ymax = Math.min(ymax, ymax);
Ymin = Math.max(ymin, ymin);
}

int area = 0;
area = (Xmax - Xmin) * (Ymax - Ymin);
return area >= 0 ? area : 0;
}
}
[/java]

2010年12月14日火曜日

SRM 149 DIV2 | 217.20/250

数値を指定のフォーマーっとで返す問題

[java]
import java.text.*;

public class FormatAmt {
public String amount (int dollars, int cents) {
return new DecimalFormat("$#,##0.00").format((dollars + cents/100.0));
}
}
[/java]

2010年12月12日日曜日

SRM 148 DIV2 | 247.20/250

ある整数が各桁の数で割り切れるかどうかを判定し、割り切れる個数を返す問題。
[java]
public class DivisorDigits {
public int howMany(int number) {
int count = 0;
int copy = number;
while(copy > 0) {
if( copy % 10 != 0)
count += number % (copy % 10) == 0 ? 1 : 0;
copy /= 10;
}
return count;
}
}
[/java]

SRM 147 DIV2 | 200.35/250

シーザー暗号をデコードする問題

[java]
public class CCipher {
public String decode(String cipherText, int shift) {
char[] decipher = cipherText.toCharArray();
for(int i=0; i < decipher.length; i++)
decipher[i] = (char)((decipher[i] - shift - 'A') % 26 + 'A');
return new String(decipher);
}
}
[/java]

2010年12月11日土曜日

SRM 146 DIV2 | 226.71/250

Yahtzeeゲームの問題
[java]
public class YahtzeeScore {
public int maxPoints(int[] toss) {
int points[] = new int[6];
for(int i : toss) {
points[i-1] += i;
}
int max = 0;
for(int i : points)
max = Math.max(max, i);
return max;
}
}
[/java]

SRM 145 DIV2 | 218.25/250

文字の配列の中から、指定されたcharacterの個数を求める問題。

[java]
public class ImageDithering {
public int count(String dithered, String[] screen) {
String allScreen = "";
for(String str : screen)
allScreen += str;
int cnt = allScreen.length() - allScreen.replaceAll("["+dithered+"]","").length();
return cnt;
}
}
[/java]

TCHS SRM 1 | 161.60/250

数字が範囲内に歩かないか調べ、その平均や範囲内に無い率を調べる問題
[java]
public class SpeedRadar {
public double averageSpeed(int minLimit, int maxLimit, int[] readings) {
double sum = 0.0;
int infringment = 0;
for(int read : readings) {
if (minLimit > read || maxLimit < read)
infringment++;
else
sum += read;
}
double average = sum/(readings.length-infringment);
return 10*infringment>readings.length ? 0.0 : average;
}
}
[/java]

Inv 2001 R1 | 79.61/250

単語の平均文字数による場合分けをして、点数を返す問題。
[java]
public class HowEasy {
public int pointVal(String problemStatement) {
String words[] = problemStatement.split(" ");
int noWord = 0;
int length = 0;
for(String word : words)
if( word.matches("^[a-zA-Z]+.*$"))
length += word.endsWith(".") ? word.length()-1 : word.length();
else
noWord++;
if (words.length-noWord == 0 || length / (words.length-noWord) <=3)
return 250;
else if ( length/(words.length-noWord) <=5)
return 500;
else
return 1000;
}
}
[/java]

SRM 144 DIV 2 | 193.89/200

与えられた秒数を時間:分:秒に直す問題。
[java]
public class Time {
public String whatTime(int seconds) {
return seconds/3600+":"+(seconds%3600)/60+":"+(seconds%60);
}
}
[/java]