It seems I'm qualified to advance to round 1, with the perfect score :D
The problems are kind of easy.
One can be solved just by using next_permutation() in STL.
Another can be solved by implementing just as it was described in the problem.
The other is a little difficult. It's DP problem, which is similar to the Pascal's Triangle.
Here, I'll post my solution to these problems.
Double Square:
- int main() {
- ifstream in(INPUT);
- ofstream out(OUTPUT);
- int n;
- long long int x;
- in >> n;
- REP(i, n) {
- in >> x;
- int ret = 0;
- for (long long int j = 0; j*j*2 <= x; j++) {
- long long int y = x - j*j;
- long long int y2 = sqrt(y) + .5;
- if (y2 * y2 == y)
- ++ret;
- }
- out << ret << endl;
- }
- cout << "done." << endl;
- return 0;
- }
- double dp[256], dpt[256];
- char bd[256][256];
- void solve(int r, int c) {
- REP(i, r) {
- memset(dpt, 0, sizeof(dpt));
- REP(j, 2*(c-1)+1) {
- if (bd[i][j] == '.')
- dpt[j] += dp[j];
- else {
- if (j - 1 < 0 + (i%2 != 0))
- dpt[j+1] += dp[j];
- else if (j + 1 >= 2*(c-1)+1-(i%2 != 0))
- dpt[j-1] += dp[j];
- else {
- dpt[j-1] += dp[j] * .5;
- dpt[j+1] += dp[j] * .5;
- }
- }
- }
- memcpy(dp, dpt, sizeof(dp));
- }
- }
- int main() {
- ifstream in(INPUT);
- ofstream out(OUTPUT);
- int n;
- in >> n;
- REP(i, n) {
- int r, c, k, m;
- in >> r >> c >> k >> m;
- REP(ii, r) {
- if (ii % 2) REP(jj, 2*(c-2)+1) {
- bd[ii][jj] = (jj % 2) ? '.' : 'x';
- }
- else REP(jj, 2*(c-1)+1) {
- bd[ii][jj] = (jj % 2) ? '.' : 'x';
- }
- }
- REP(j, m) {
- int ri, ci;
- in >> ri >> ci;
- bd[ri][2*ci] = '.';
- }
- REP(j, r) {
- if (j % 2) {
- char tmp[256];
- tmp[0] = '.';
- REP(jj, 2*(c-2)+1)
- tmp[jj+1] = bd[j][jj];
- tmp[2*(c-2)+2] = '.';
- memcpy(bd[j], tmp, sizeof(bd[j]));
- }
- }
- double prb = .0;
- int ret = -1;
- REP(p, c-1) {
- memset(dp, 0, sizeof(dp));
- dp[2*p+1] = 1.;
- solve(r, c);
- if (dp[2*k+1] > prb)
- prb = dp[2*k+1], ret = p;
- }
- char rprb[16];
- sprintf(rprb, "%.6lf", prb);
- out << ret << " " << rprb << endl;
- }
- cout << "done." << endl;
- return 0;
- }
Studious Student:
- int main() {
- ifstream in(INPUT);
- ofstream out(OUTPUT);
- int n, m;
- in >> n;
- REP(i, n) {
- in >> m;
- vector<string>ss;
- string str, ret = "";
- REP(j, m) {
- in >> str;
- ss.PB(str);
- }
- sort(ALL(ss));
- do {
- string ptr = "";
- EACH(itr, ss)
- ptr += *itr;
- if (ret == "" || ret > ptr)
- ret = ptr;
- } while (next_permutation(ALL(ss)));
- out << ret << endl;
- }
- cout << "done." << endl;
- return 0;
- }
I'm shooting for advancing to round2 !!
0 件のコメント:
コメントを投稿