Задача из тренировок. Кубики.
Difference between en2 and ru1, changed 2,584 character(s)
Здравствуйте, решил порешать задачи из тренировок. Но не могу до конца понять смысл задачи:↵
[задача C: Кубики](http://mirror.codeforces.com/gym/100942). ↵

Я делаю все просто: У меня есть две строки A и B. При каждой новом кубике, я преобразую строку кубика для того чтобы A[i] был спереди, и если M[i] доступна сверху, снизу и сбоку я умножаю вероятность на 1, если она доступна или сбоку, или сверху, или снизу, то умножаю на 0.5.↵

Мой код:↵

~~~~~↵
#include <bits/stdc++.h>↵
#define MAXN 100005↵
#define INF 2e18↵
#define _INF -20000000↵

typedef long long ll;↵
using namespace std;↵

const ll mod = 1e9 + 9ll;↵
double ans = 1.0;↵

string s1, s2, t, no = "-";↵

int check(string s, char c) {↵
    int res = 0;↵
    if(s[0] == c || s[1] == c || s[3] == c || s[5] == c) res += 1;↵
    if(s[0] == c || s[2] == c || s[4] == c || s[5] == c) res += 1;↵
    return res;↵
}↵

string str(string s, char c) {↵

    if(s[0] == c) {↵
        return s;↵
    }↵
    else if(s[1] == c) {↵
        string t = s;↵
        t[0] = s[1];↵
        t[1] = s[5];↵
        t[2] = s[2];↵
        t[3] = s[0];↵
        t[4] = s[4];↵
        t[5] = s[3];↵
        return t;↵
    }↵
    else if(s[2] == c) {↵
        string t = s;↵
        t[0] = s[2];↵
        t[1] = s[1];↵
        t[2] = s[5];↵
        t[3] = s[3];↵
        t[4] = s[0];↵
        t[5] = s[4];↵
        return t;↵
    }↵
    else if(s[3] == c) {↵
        string t = s;↵
        t[0] = s[3];↵
        t[1] = s[0];↵
        t[2] = s[2];↵
        t[3] = s[5];↵
        t[4] = s[4];↵
        t[5] = s[1];↵
        return t;↵
    }↵
    else if(s[4] == c) {↵
        string t = s;↵
        t[0] = s[4];↵
        t[1] = s[1];↵
        t[2] = s[0];↵
        t[3] = s[3];↵
        t[4] = s[5];↵
        t[5] = s[2];↵
        return t;↵
    }↵
    else if(s[5] == c) {↵
        assert(!1);↵
        string t = s;↵
        t[0] = s[5];↵
        t[1] = s[1];↵
        t[2] = s[4];↵
        t[3] = s[3];↵
        t[4] = s[2];↵
        t[5] = s[0];↵
        return t;↵
    }↵
    else return no;↵
}↵
int main() {↵
    cin >> s1 >> s2;↵
    for(int i = 0; i < s1.length(); ++i) {↵
        cin >> t;↵
        t = str(t, s1[i]);↵
        assert(t != no);↵
        if(t == no) {↵
            ans = 0.0;↵
            continue;↵
        }↵
        if(s1[i] != s2[i]) {↵
            int c = check(t, s2[i]);↵
            if(c == 1) ans /= 2.0;↵
            else if(c == 0) ans = 0.0;↵
        }↵
    }↵
    cout << fixed << setprecision(6) << ans << endl;↵
}↵
~~~~~↵

Что не так в моем решении?↵
Буду благодарен за помощь.↵

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru1 Russian CoderInOutUse 2016-07-17 18:42:14 2584 Первая редакция перевода на Русский
en2 English CoderInOutUse 2016-07-17 18:41:02 67
en1 English CoderInOutUse 2016-07-17 18:40:39 2651 Initial revision (published)