zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 125

    A - Biscuit Generator

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int a, b, t;
    int main(){
        cin>>a>>b>>t;
        cout << (t / a) * b << endl;
        return 0;
    }
    

    B - Resale

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int n, a[N], c[N];
    int main() {
        cin >> n;
        for (int i = 0; i < n; i++) cin >> a[i];
        for (int i = 0; i < n; i++) cin >> c[i];
        int res = 0;
        for (int i = 0; i <= ((1 << n) - 1); i++) {
            int tmp = 0;
            for (int j = 0; j < n; j++) {
                if (i & (1 << j)) {
                    tmp += a[j] - c[j];
                }
            }
            res = max(res, tmp);
        }
        cout << res << endl;
        return 0;
    }
    

    C - GCD on Blackboard

    给出n个数,现在可以选择一个数,将其修改为任何一个数,要求使得修改后的n个数的gcd最大,输出这个gcd

    注意到答案肯定是n-1个数的gcd,题目转化为对于每个数,求除了这个数以外的n-1个数的gcd

    但是直接枚举肯定超时,所以可以利用前缀后缀的gcd,处理出前缀后缀,然后扫一遍即可

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int n, a[N], suml[N], sumr[N];
    int main() {
        cin >> n;
        for (int i = 1; i <= n; i++) cin >> a[i];
        for (int i = 1; i <= n; i++) {
            suml[i] = __gcd(suml[i - 1], a[i]);
            //cout << suml[i] << ' ';
        }
        for (int i = n; i >= 1; i--) {
            sumr[i] = __gcd(sumr[i + 1], a[i]);
        }
        int res = suml[n];
        for (int i = 1; i <= n; i++) {
            res = max(res, __gcd(suml[i - 1], sumr[i + 1]));
        }
        cout << res << endl;
        return 0;
    }
    

    D - Flipping Signs

    给出n个数,可以进行无限次操作,每次操作选择相邻的两个数,将其取负,问最后得到的n个数的和的最大值是多少

    注意到可以多次操作,那么相当于可以随意将负号移动到任意位置,如果n个数中有0,那么可以利用0将全部的负号消除

    否则如果负数的个数为奇数,那么必然要留下一个负数,那就让这个负号给绝对值最小的数即可

    否则全部的负数都可以消掉

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int n;
    int a[N];
    int main() {
        cin >> n;
        int flag0 = 0;
        int sum = 0;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            if (a[i] < 0) sum++;
            if (a[i] == 0) flag0 = 1;
        }
        LL res = 0;
        if (flag0) {
            for (int i = 0; i < n; i++) {
                res += abs(a[i]);
            }
            cout << res << endl;
        } else {
            if (sum & 1) {
                int minn = 0x3f3f3f3f;
                for (int i = 0; i < n; i++) {
                    res += abs(a[i]);
                    minn = min(minn, abs(a[i]));
                }
                res -= 2 * minn;
                cout << res << endl;
            } else {
                for (int i = 0; i < n; i++) {
                    res += abs(a[i]);
                }
                cout << res << endl;
            }
        }
    
        return 0;
    }
    
  • 相关阅读:
    厦门主要IT企业名单(至20071205)
    空,无
    扩展TextBox控件 荣
    我写的C++控件基类 荣
    扩展DataGrid 荣
    对重构的理解 荣
    C#中的委托与事件 荣
    CommunityServer中的代码页面分离 荣
    Oracle创建表空间,导出数据库,导入数据库 荣
    C#中的修饰符 荣
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/14392289.html
Copyright © 2011-2022 走看看