zoukankan      html  css  js  c++  java
  • Codeforces Round #588 (Div. 2)

    题目链接

    C:
    本题可以直接暴力求解,类比八皇后问题,使每个点分别对应一个值,分别判断有几条边能够满足即可

    #include<bits/stdc++.h>
    using namespace std;
    #define ms(x,y) memset(x, y, sizeof(x))
    #define lowbit(x) ((x)&(-x))
    #define sqr(x) ((x)*(x))
    typedef long long LL;
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    bool vis[8][8];
    int col[8];
    
    void run_case() {
        int n, m;
        cin >> n >> m;
        vector<pii> a(m);
        for(int i = 0; i < m; ++i)
            cin >> a[i].first >> a[i].second;
        int ans = 0;
        function<void(int)> dfs = [&](int x) {
            if(x > n) {
                int cnt = 0;
                ms(vis, 0);
                for(int i = 0; i < m; ++i) {
                    if(vis[col[a[i].first]][col[a[i].second]]) continue;
                    vis[col[a[i].first]][col[a[i].second]] = vis[col[a[i].second]][col[a[i].first]] = true;
                    cnt++;
                }
                ans = max(ans, cnt);
                return;
            }
            for(int i = 1; i <= 6; ++i) {
                col[x] = i;
                dfs(x+1);
            }
        };
        dfs(1);
        cout << ans;
    }
    
    
    int main() {
        ios::sync_with_stdio(false), cin.tie(0);
        cout.flags(ios::fixed);cout.precision(9);
        //int t; cin >> t;
        //while(t--)
        run_case();
        cout.flush();
        return 0;
    }
    

    D:
    读懂题意后也不难,至少有2个人是calm的,则集合中至少有2个人的knowledge是相等的,设为(x),然后再遍历,设(y)为当前的值,若(x&y==y),则说明(x geq y)(y)中拥有的knowledge(x)都有

    #include<bits/stdc++.h>
    using namespace std;
    #define ms(x,y) memset(x, y, sizeof(x))
    #define lowbit(x) ((x)&(-x))
    #define sqr(x) ((x)*(x))
    typedef long long LL;
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    
    void run_case() {
        int n; cin >> n;
        vector<LL> a(n), b(n), valid;
        map<LL, int> mp;
        for(auto &x: a) {
            cin >> x;
            mp[x]++;
        }
        for(auto &x: b) cin >> x;
        for(auto i: mp)
            if(i.second > 1)
                valid.push_back(i.first);
        LL ans = 0;
        for(int i = 0; i < n; ++i) {
            for(auto j: valid) {
                if((a[i]&j)==a[i]) {
                    ans += b[i];
                    break;
                }
            }
        }
        cout << ans;
    }
    
    
    int main() {
        ios::sync_with_stdio(false), cin.tie(0);
        cout.flags(ios::fixed);cout.precision(9);
        //int t; cin >> t;
        //while(t--)
        run_case();
        cout.flush();
        return 0;
    }
    
  • 相关阅读:
    .net core3.1 abp动态菜单和动态权限(思路) (二)
    .net core3.1 abp学习开始(一)
    api.versioning 版本控制 自动识别最高版本
    .netcore 定制化项目开发的思考和实现
    netcore 非注入全局获取配置文件
    linux nginx搭建与使用
    linux docker .net core 从建立网站到预览
    linux 学习 mysql安装到连接
    linux 安装redis及问题收集
    为何说要多用组合少用继承?如何决定该用组合还是继承?
  • 原文地址:https://www.cnblogs.com/GRedComeT/p/13052210.html
Copyright © 2011-2022 走看看