2개의 댓글이 있습니다.
-
-
nocut98 -
300에서 조커없이 외부의 박스에 버린다고 생각하고 안옮겨도 되는 박스(1색깔만 있거나 비어 있는 박스)의 갯수를 세서 (전체 박스 - 안옮겨도 되는 박스) 하고, 조커는 마지막에 하나 빼주는 방식도 가능하더군요;;;
[spoiler="코드..."][code c++]
int minMoves(vectorboxes) {
int rr(0);
int nomove(0);
vectorb(100, false);
FSZ(i,0,boxes) {
int count(0);
int pos(0);
FSZ(j,0,boxes[i]) {
if(boxes[i][j]!='0') {
++count;
pos = j;
}
}
if(count==1) b[pos] = true;
else if(count == 0) ++nomove;
}
nomove += count(all(b), true);
rr = sz(boxes) - nomove - 1;
return max(rr, 0);
}
[/code][/spoiler]
16년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
astein
챌이 꽤나 많았던 대회였는데.. 밥먹고 온다고 챌을 못한게 아쉬웠습니다 -.-
ainu7님이 저보다 랭킹이 높으심에도 불구하고 300점짜리를 틀렸다는 이유로 저한테 에디토리얼을 떠넘기셨습니다.
하지만 ainu7님의 382, 384 Div 1 에디토리얼을 기대합니다.
Easy (300 pts.)
struct MarblesRegroupingEasy {
boxes) {
numOfBox(M, 0);
int minMoves(vector
int N = sz(boxes), M = sz(boxes[0]);
int ret = 987654;
REP(joker, N) {
vector
int tmp = 0;
REP(i, N) {
if (i == joker) continue;
int ct = 0;
REP(j, M)
if (boxes[i][j] != '0') ct++;
if (ct > 1) {
tmp++;
} else {
REP(j, M)
if (boxes[i][j] != '0') numOfBox[j]++;
}
}
sort(all(numOfBox));
reverse(all(numOfBox));
REP(i, min(N - 1, M))
if (numOfBox[i] > 0) numOfBox[i]--;
REP(i, M) tmp += numOfBox[i];
ret <?= tmp;
}
return ret;
}
};
[/spoiler]
Hard (950 pts.)
const int MOD = 1000000007; A, vector B, string _N) {
int pow(int a, long long b) {
if (b == 0) return 1;
if (b == 1) return a;
long long ret = 0;
ret = pow(a, b / 2);
ret = ret * ret;
ret %= MOD;
if (b % 2 == 1) {
ret = ret * a;
ret %= MOD;
}
return ret;
}
int get(long long a, long long r, long long k) {
if (k == 0) return 1;
if (k == 1) return (1 + r) % MOD;
long long L, R, ret = 0;
if (k % 2 == 0) {
L = get(a, r, k / 2 - 1);
R = (1 + pow(r, k / 2)) % MOD;
} else {
L = get(a, r, k / 2);
R = (1 + pow(r, (k + 1) / 2)) % MOD;
}
ret = ((L * R) % MOD);
if (k % 2 == 0) ret += pow(r, k);
ret %= MOD;
return ret;
}
struct StrangeArray {
int calculateSum(vector
long long N;
int M = sz(A) * sz(B) / __gcd(sz(A), sz(B));
sscanf(_N.c_str(), "%Ld", &N);
long long ret = 0;
for (int i = 0; i < M; ++i) {
long long a = pow(A[i % sz(A)], B[i % sz(B)] + i / sz(B));
long long r = pow(A[i % sz(A)], M / sz(B));
long long K = (N / M) + (N % M > i) - 1;
if (K == -1) break;
ret += ((long long)a * (long long)get(a, r, K)) % MOD;
ret %= MOD;
}
return (int)ret;
}
};
16년 전