F题目题解

F题目题解

注意:每题只能选择一个选项,正确答案要保证这组解满足所有题目的限制条件。

对于一道题目可能会存在多个答案符合条件,但是我们只能选择一个。

对于最终的正确答案一定保证同时满足十个题目的限制条件。

因此此题非人力可为,只能用机器采取暴力搜索的办法。

暴力搜索十个题目的答案,时间复杂度为O(4^10)。

#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define PII pair<int, int>
#define int long long
const int N = 1e6 + 10;
const int INF = 1e18;
vector<int> ans;
int book[5];
bool ans2() {
    if (ans[2] == 1 && ans[5] == 3) return true;
    if (ans[2] == 2 && ans[5] == 4) return true;
    if (ans[2] == 3 && ans[5] == 1) return true;
    if (ans[2] == 4 && ans[5] == 2) return true;
    return false;
}
bool ans3() {
    if (ans[3] == 1 && ans[3] - ans[6] && ans[3] - ans[2] && ans[3] - ans[4])
        return true;
    if (ans[3] == 2 && ans[6] - ans[3] && ans[6] - ans[2] && ans[6] - ans[4])
        return true;
    if (ans[3] == 3 && ans[2] - ans[3] && ans[2] - ans[6] && ans[2] - ans[4])
        return true;
    if (ans[3] == 4 && ans[4] - ans[3] && ans[4] - ans[6] && ans[4] - ans[2])
        return true;
    return false;
}
bool ans4() {
    if (ans[4] == 1 && ans[1] == ans[5]) return true;
    if (ans[4] == 2 && ans[2] == ans[7]) return true;
    if (ans[4] == 3 && ans[1] == ans[9]) return true;
    if (ans[4] == 4 && ans[6] == ans[10]) return true;
    return false;
}
bool ans5() {
    if (ans[5] == 1 && ans[8] == 1) return true;
    if (ans[5] == 2 && ans[4] == 2) return true;
    if (ans[5] == 3 && ans[9] == 3) return true;
    if (ans[5] == 4 && ans[7] == 4) return true;
    return false;
}
bool ans6() {
    if (ans[6] == 1 && ans[8] == ans[2] && ans[8] == ans[4]) return true;
    if (ans[6] == 2 && ans[8] == ans[1] && ans[8] == ans[6]) return true;
    if (ans[6] == 3 && ans[8] == ans[3] && ans[8] == ans[10]) return true;
    if (ans[6] == 4 && ans[8] == ans[5] && ans[8] == ans[9]) return true;
    return false;
}
bool ans7() {
    int mi = min({book[1], book[2], book[3], book[4]});
    if (ans[7] == 1 && book[3] == mi) return true;
    if (ans[7] == 2 && book[2] == mi) return true;
    if (ans[7] == 3 && book[1] == mi) return true;
    if (ans[7] == 4 && book[4] == mi) return true;
    return false;
}
bool ans9() {
    int da = (ans[1] == ans[6]);
    if (ans[9] == 1) {
        int da1 = (ans[6] == ans[5]);
        if (da1 - da) return true;
    }
    if (ans[9] == 2) {
        int da1 = (ans[10] == ans[5]);
        if (da1 - da) return true;
    }
    if (ans[9] == 3) {
        int da1 = (ans[2] == ans[5]);
        if (da1 - da) return true;
    }
    if (ans[9] == 4) {
        int da1 = (ans[9] == ans[5]);
        if (da1 - da) return true;
    }
    return false;
}
bool ans10() {
    int cha = max({book[1], book[2], book[3], book[4]}) -
        min({book[1], book[2], book[3], book[4]});
    if (ans[10] == 1 && cha == 2) return true;
    if (ans[10] == 2 && cha == 4) return true;
    if (ans[10] == 3 && cha == 3) return true;
    if (ans[10] == 4 && cha == 1) return true;
    return false;
}
void dfs() {
    if (ans.size() == 11) {
        if (ans2() && ans3() && ans4() && ans5() && ans6() && ans7() && ans9() &&
            ans10()) {
            for (int i = 1; i < ans.size(); i++) cout << char('A' + ans[i] - 1);
            cout << endl;
        }
        return;
    }
    for (int i = 1; i <= 4; i++) {
        ans.push_back(i);
        book[i]++;
        dfs();
        book[i]--;
        ans.pop_back();
    }
}
void solve() {
    ans.push_back(10);
    dfs();
}
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int T = 1;
    //	cin>>T;
    while (T--) solve();
    return 0;
}

全部评论
牛逼
点赞 回复 分享
发布于 04-01 21:20 四川
其实也可以人力可为 指猜猜乐bushi(主要是猜了个最核心的5为b 然后得出247 再推3bcd不可后直接猜出合理答案)
点赞 回复 分享
发布于 04-01 21:46 广东
实力强大
点赞 回复 分享
发布于 04-01 23:40 江西

相关推荐

昨天 11:07
河南大学 Java
宇宙厂 测开 n*15
丘丘给个offer:有后选后
点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
10-04 17:25
门头沟学院 Java
snqing:Java已经饱和了,根本不缺人。随便一个2000工资的都200人起投递
点赞 评论 收藏
分享
评论
5
收藏
分享
牛客网
牛客企业服务