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;
    }
    
  • 相关阅读:
    Linux设备驱动之Ioctl控制
    虚拟内存与物理内存的区别
    怎么远程控制他人电脑
    二维数组和指针
    二维数组和指针(C语言)
    帧率、码流与分辨率相关知识
    深入理解FIFO
    安装lsb_release
    Linux初学之vmware Workstation 网络连接三种模式
    RTSP协议学习笔记
  • 原文地址:https://www.cnblogs.com/GRedComeT/p/13052210.html
Copyright © 2011-2022 走看看