## TopCoder SRM 362 Div 2

처음 탑코더를 해보았다.. ㅎㅎ 생각보다 재밌다..
초반부터 삽질에 삽질을 거듭했지만..
같은방에있는 사람들도 다 비슷한 모양이다..;;
결국 3등..~ -_-;;
failed challenge가 하나 있었지만.. 시스템오류로인해 카운트되지않았다.. ;;
근데.. 다들 코드를 이상하게 짜던데.. challenge를 안받을려고하는 고도의 작전인가..;; ThrowTheBall

지금까지 공을 받은 횟수가 홀수이면 오른쪽, 짝수이면 왼쪽으로 공을 L칸만큼 패스..
그러다가 누군가 공을 M번 받으면 끝내고, 몇번 공을 패스했는지 찍어주는 문제..
그냥 simulation 했다..

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

class ThrowTheBall {
public:

int timesThrown(int N, int M, int L)
{
int check;
int cnt, cur;

memset(check, 0, sizeof(check));
check = 1;

if (M == 1)
return 0;
cnt = 0;
cur = 0;
while (1) {
if (check[cur] & 1) {
cur -= L;
while (cur < 0)
cur += N;
}
else {
cur += L;
cur %= N;
}
cnt++;
check[cur]++;
if (check[cur] == M)
break;
}
return cnt;
}

};

 MaximizeSquares

N개의 점이 있을때, 임의의 4개의 점을 선택해서 서로 다른 정사각형(단, 네변은 x축, y축과 평행)을 최대 몇개 만들 수 있는지 구하는 문제..

우선 모든 점들을 채워서 만들 수 있는 가장 큰 정사각형을 만든다.. 그리고나서 남은 점들을 한쪽 변에 나란히 붙인다.. 그리고 나서 정사각형의 개수를 센다.. -_-;
급한 마음에 막판에 코드가 이상해졌음..;;

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;

class MaximizeSquares {
public:
int squareCount(int N) {
int i;
int n, cnt;
int temp, temp2;
if (N <= 3)
return 0;
n = (int)(sqrt((double)N)+0.0000001);
cnt = 0;
for (i = 1; i < n; i++) {
cnt += i*i;
}

N -= n*n;

temp = N / n;
temp2 = N % n;
if (temp == 1) {
cnt += n * (n-1) / 2;
cnt += temp2 * (temp2-1) / 2;
}
else if (temp == 2) {
cnt += n * (n-1);
}
else {
cnt += temp2 * (temp2-1) / 2;
}

return cnt;
}

};

 SignificanceArithmetic

1000점짜리는.......
너무 길어서 안읽어봤다.. ㅠ_ㅠ

문제상의 문제로 이번 SRM은 rating에 영향을 주지 않았다..
덕분에 파란색에서 다시 not rated로 빽..~ -_-

#### 'Problem Solving > TopCoder logs' 카테고리의 다른 글

 TopCoder SRM 371 Div2 (완료)  (2) 2007.10.14 2007.10.14 2007.10.05 2007.10.03 2007.09.27 2007.09.18 2007.09.13 2007.09.09 2007.08.12 2007.08.08 2007.08.07

to Top