zoukankan      html  css  js  c++  java
  • cf练习

    (模拟,集合,文氏图)Groups(https://codeforces.com/problemset/problem/1598/B)

    题意:n个学生(n为偶数),每个学生都有5个数组来表示他们周一到周五有没有空,问能否将这n个学生分成同样大小的两组,一组再星期a上课,另一组在
    星期b上课(a != b)
    方法:枚举两个日子i, j, 求在i有空的学生数p和在j有空的学生数q,以及i和j都有空的学生数r,如果p <= n / 2 && q <= n / 2 && p + q + r == n则说明可以

    #include<iostream>
    using namespace std;
    
    int g[1010][5];
    
    void solve(){
        int n;
        cin >> n;
        for(int i = 0; i < n; i ++)
            for(int j = 0; j < 5; j ++)
                cin >> g[i][j];
        
        for(int i = 0; i < 5; i ++)
            for(int j = i + 1; j < 5; j ++){
                int a = 0, b = 0, c = 0;
                for(int k = 0; k < n; k ++)
                    if(g[k][i] && g[k][j]) c ++;
                    else if(g[k][i]) a ++;
                    else if(g[k][j]) b ++;
                if(a <= n / 2 && b <= n / 2 && a + b + c == n){
                    cout << "YES" << endl;
                    return;
                }
            }
        cout << "NO" << endl;
    }
    
    int main(){
        int t;
        cin >> t;
        while(t --) solve();
    }
    

    (数学)Luntik and Concerts(https://codeforces.com/problemset/problem/1582/A)

    题意:a个1,b个2,c个3,问将他们分成两份,最小的差是多少
    方法:sum = a + 2b + 3c, 那么可以构造出1到sum的所有值,如果sum=偶数,则差为0,否则差为1

    #include<bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    void solve(){
        int a, b, c;
        cin >> a >> b >> c;
        int d = a + b * 2 + c * 3;
        cout << d % 2 << endl;
    }
    
    signed main(){
        int t;
        cin >> t;
        while(t --) solve();
    }
    

    (组合数学)Luntik and Subsequences(https://codeforces.com/problemset/problem/1582/B)

    题意:给你长度为n的串,和为sum,问所有和为sum - 1的串的个数有多少
    方法:统计1的个数cnt1和0的个数cnt0,答案为cnt1 * (1 << cnt0)

    #include<bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    void solve(){
        int n;
        cin >> n;
        vector<int> a(n);
        for(auto &i : a) cin >> i;
        int cnt0 = count(a.begin(), a.end(), 0);
        int cnt1 = count(a.begin(), a.end(), 1);
        cout << ((int)1 << cnt0) * cnt1 << endl;
    }
    
    signed main(){
        int t;
        cin >> t;
        while(t --) solve();
    } 
    

    (思维,栈,括号序列)ABC String(https://codeforces.com/contest/1494/problem/A)

    题意:给你一个串S,只包含A、B、C,问将其中的A换成同一种括号,只包含A、B、C,问将其中的A换成同一种括号, B换成同一种括号,
    C换成同一种括号,问能否构成合法的括号序列
    方法:如果S[0] = s.back()一定不可以,否则要求和S[0]一样的必须换成左括号,和S.back()一样的必须换成右括号,设S中S[0]的个数为cntl,
    S.back()的个数为cntr, 如果cntl < cntr, 那么就将第三种字符换成'(', 否则换成')', 最终得到一个括号序列B,检查他是不是合法即可
    一开始我直接判断第三种字符的个数是否满足 = abs(cntl - cntr), 这是不对的,反例ACCAAB

    #include<bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    void solve(){
        string s;
        cin >> s;
        if(s[0] == s.back()){
            cout << "NO" << endl;
            return;
        }
        int cntl = count(s.begin(), s.end(), s[0]);
        int cntr = count(s.begin(), s.end(), s.back());
        char rep = '(', st = s[0], ed = s.back();
        if(cntr < cntl) rep = ')';
        for(int i = 0; i < s.size(); i ++){
            if(s[i] == st) s[i] = '(';
            else if(s[i] == ed) s[i] = ')';
            else s[i] = rep;
        }
        
        //ACCAAB
        
        stack<char> stk;
        for(int i = 0; i < s.size(); i ++)
            if(s[i] == '(') stk.push(s[i]);
            else{
                if(stk.empty()){
                    cout << "NO" << endl;
                    return;
                }
                stk.pop();
            }
        
        if(stk.empty()) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    
    signed main(){
        int t;
        cin >> t;
        while(t --) solve();
    }
    
  • 相关阅读:
    pku2704 Pascal's Travels
    MFC中获取各种类指针的方法 (转)
    VC中MessageBox的常见用法
    直接通过ADO操作Access数据库(转)
    (转)基于MapWinGis开发探索(三)改善缩放、渲染、显示文本
    VC画线几个常见方法
    虚拟现实技术发展的新趋势(转)
    (转)基于MapWinGis开发探索(二)——注册、加载、基本操作
    基于MFC的对话框程序加启动进度条
    IT应用新动向 未来需要云计算
  • 原文地址:https://www.cnblogs.com/tomori/p/15594658.html
Copyright © 2011-2022 走看看